3 Copyright 2012 Yahoo! Inc. All rights reserved.
4 Licensed under the BSD License.
5 http://yuilibrary.com/license/
7 YUI.add('dom-class', function(Y) {
9 var addClass, hasClass, removeClass;
13 * Determines whether a DOM element has the given className.
16 * @param {HTMLElement} element The DOM element.
17 * @param {String} className the class name to search for
18 * @return {Boolean} Whether or not the element has the given class.
20 hasClass: function(node, className) {
21 var re = Y.DOM._getRegExp('(?:^|\\s+)' + className + '(?:\\s+|$)');
22 return re.test(node.className);
26 * Adds a class name to a given DOM element.
29 * @param {HTMLElement} element The DOM element.
30 * @param {String} className the class name to add to the class attribute
32 addClass: function(node, className) {
33 if (!Y.DOM.hasClass(node, className)) { // skip if already present
34 node.className = Y.Lang.trim([node.className, className].join(' '));
39 * Removes a class name from a given element.
42 * @param {HTMLElement} element The DOM element.
43 * @param {String} className the class name to remove from the class attribute
45 removeClass: function(node, className) {
46 if (className && hasClass(node, className)) {
47 node.className = Y.Lang.trim(node.className.replace(Y.DOM._getRegExp('(?:^|\\s+)' +
48 className + '(?:\\s+|$)'), ' '));
50 if ( hasClass(node, className) ) { // in case of multiple adjacent
51 removeClass(node, className);
57 * Replace a class with another class for a given element.
58 * If no oldClassName is present, the newClassName is simply added.
59 * @method replaceClass
61 * @param {HTMLElement} element The DOM element
62 * @param {String} oldClassName the class name to be replaced
63 * @param {String} newClassName the class name that will be replacing the old class name
65 replaceClass: function(node, oldC, newC) {
66 //Y.log('replaceClass replacing ' + oldC + ' with ' + newC, 'info', 'Node');
67 removeClass(node, oldC); // remove first in case oldC === newC
72 * If the className exists on the node it is removed, if it doesn't exist it is added.
75 * @param {HTMLElement} element The DOM element
76 * @param {String} className the class name to be toggled
77 * @param {Boolean} addClass optional boolean to indicate whether class
78 * should be added or removed regardless of current state
80 toggleClass: function(node, className, force) {
81 var add = (force !== undefined) ? force :
82 !(hasClass(node, className));
85 addClass(node, className);
87 removeClass(node, className);
92 hasClass = Y.DOM.hasClass;
93 removeClass = Y.DOM.removeClass;
94 addClass = Y.DOM.addClass;
98 }, '3.5.0' ,{requires:['dom-core']});