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
removeClass(node, oldC); // remove first in case oldC === newC
71
* If the className exists on the node it is removed, if it doesn't exist it is added.
74
* @param {HTMLElement} element The DOM element
75
* @param {String} className the class name to be toggled
76
* @param {Boolean} addClass optional boolean to indicate whether class
77
* should be added or removed regardless of current state
79
toggleClass: function(node, className, force) {
80
var add = (force !== undefined) ? force :
81
!(hasClass(node, className));
84
addClass(node, className);
86
removeClass(node, className);
91
hasClass = Y.DOM.hasClass;
92
removeClass = Y.DOM.removeClass;
93
addClass = Y.DOM.addClass;
97
}, '3.5.0' ,{requires:['dom-core']});