回答編集履歴

1

className 処理の簡略化

2015/08/04 12:20

投稿

think49
think49

スコア18164

test CHANGED
@@ -1,6 +1,6 @@
1
- `classList` はともかく、`className` 処理はループさせない重複チェックが厳しいと思います。
1
+ `arguments` `Array#slice` すれば、第二引数以降の可変長引数を処理できると思います。
2
2
 
3
- (重複ても実害はないとはいえ、気持ちのいいものではないですね。)
3
+ (2015/08/04 21:19 className 処理を簡略化できた為、修正ました。)
4
4
 
5
5
 
6
6
 
@@ -16,41 +16,17 @@
16
16
 
17
17
  var classList = element.classList,
18
18
 
19
- classTokenList = Array.prototype.slice.call(arguments, 1),
19
+ classTokenList = Array.prototype.slice.call(arguments, 1);
20
-
21
- currentClassName, i;
22
20
 
23
21
 
24
22
 
25
- if (classList && classList.add) {
23
+ if (classList && typeof classList.add === 'function') {
26
24
 
27
25
  classList.add.apply(classList, classTokenList);
28
26
 
29
27
  } else {
30
28
 
31
- currentClassName = element.className;
32
-
33
- i = classTokenList.length;
34
-
35
-
36
-
37
- while (i--) {
38
-
39
- className = ' ' + classTokenList[i];
29
+ element.className += ' ' + classTokenList.join(' ');
40
-
41
-
42
-
43
- if ((' ' + currentClassName + ' ').indexOf(className + ' ') === -1) {
44
-
45
- currentClassName += className;
46
-
47
- }
48
-
49
- }
50
-
51
-
52
-
53
- element.className = currentClassName;
54
30
 
55
31
  }
56
32