2016-06-01 9 views
4

element.classListは配列の中で私のunderstanding .includes()が使用されているので、なぜこれがうまくいかないのか分からないので、classListで.contains()を使うことができると知っていますが、なぜ.includes )は動作しません。 、私は、これは、例えば、それは習慣.includes()が.classListで動作しないのはなぜですか?

var li=document.createElement('li'); 
li.classList.add('main-nav'); 
li.classList.includes('main-nav'); 

を動作入力した場合

両方が、アレイであるが、これは

var ary=['a','b','c']; 
ary.includes('a');        
+0

あなたは '含む'を探しています。 – evolutionxbox

答えて

5

Element.classListがアレイ状コンソールでの印刷が、実際DOMTokenListオブジェクトです。しかし、Firefox上で試してみると、DOMTokenList["main-nav"]

includesが配列メソッドであるのに対して、それはli.classList.includes is not a functionを返すようにしています。

Spread operatorを使用して、配列リテラルにすることができます。

[...li.classList].includes('main-nav') 

また、containsメソッドを使用することもできます。

li.classList.contains('main-nav') 
+0

スペース区切り文字列? [DOMトークンリスト](https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList)ではありませんか? – evolutionxbox

+0

@evolutionxboxはい、それは..私はちょうどそれ後にそれについての詳細な説明を追加した..まだ、それを指摘してくれてありがとう:) – choz

7

理由includesが配列されていない起因classListに動作しないであろうアレイ状のオブジェクトです。この場合、それはDOM Token Listです。

次を使用して配列に配列のようなオブジェクトに変換することができます:

var liClasses = [].slice.apply(li.classList); 

または

var liClasses = [...li.classList]; // es2015 syntax 

そうでない場合は、.includes().contains()する必要があります。指定されたクラスの値は、要素のclass属性に存在する場合

li.classList.contains('main-nav') 

https://developer.mozilla.org/en-US/docs/Web/API/Element/classListが含まれてい

かをチェックし(String)を参照してください。

関連する問題