forked from h5bp/html5please
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclassList.js
40 lines (34 loc) · 1.14 KB
/
classList.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*
* A minimal classList fallback.
* By Devon Govett
* MIT LICENSE
*/
classList = (function() {
var re = /\s+/,
indexOf = Array.prototype.indexOf || function(item) {
for (var i = 0, len = this.length; i < len; i++)
if (this[i] === item) return i;
return -1;
},
update = function(node, fn) {
return function(value) {
var classes = node.className.split(re),
index = indexOf.call(classes, value);
fn(classes, index, value);
node.className = classes.join(" ");
}
};
return function(node) {
return node.classList || {
add: update(node, function(classes, index, value) {
~index || classes.push(value);
}),
remove: update(node, function(classes, index, value) {
~index && classes.splice(index, 1);
}),
toggle: update(node, function(classes, index, value) {
~index ? classes.splice(index, 1) : classes.push(value);
})
};
};
})();