-
Notifications
You must be signed in to change notification settings - Fork 0
/
classlist.js
93 lines (79 loc) · 1.7 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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
let trim = /^\s+|\s+$/g;
let whitespace = /\s+/g;
/**
*
* @param {*} input
*/
function interpret(input) {
return typeof input === 'string' ? input.replace(trim, '').split(whitespace) : input;
}
/**
* @desc 判断元素是不是HTMLElement对象
* @param {*} o
*/
function isElement(o) {
let elementObjects = typeof HTMLElement === 'object';
return elementObjects ? o instanceof HTMLElement : isElementObject(o);
}
/**
* 判断是不是dom对象
* @param {*} o
*/
function isElementObject(o) {
return o && typeof o === 'object' && typeof o.nodeName === 'string' && o.nodeType == 1;
}
/**
*
* @param {*} el
*/
function classes(el) {
if (isElement(el)) {
return el.className.replace(trim, '').split(whitespace);
}
return [];
}
function set(el, input) {
if (isElement(el)) {
el.className = interpret(input).join(' ');
}
}
/**
* @desc add
*/
function add(el, input) {
let current = remove(el, input);
let values = interpret(input);
current.push.apply(current, values);
set(el, current);
return current;
}
/**
* @desc remove
*/
function remove(el, input) {
let current = classes(el);
let values = interpret(input);
values.forEach(function(value) {
let i = current.indexOf(value);
if (-1 != i) {
current.splice(i, 1);
}
});
set(el, current);
return current;
}
function contains(el, input) {
let current = classes(el);
var values = interpret(input);
return values.every(function(value){
return current.indexOf(value) !== -1;
})
}
export default {
add: add,
remove: remove,
contains: contains,
has: contains,
set: set,
get: classes
}