Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

element.classList returns an array of classes, its my understanding .includes() is used with arrays, so I don't understand why this wont work, I know I can use .contains() with classList but I'm curious as to why .includes() doesn't work.

both are arrays, if I typed this for example it wont work

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

but this will

var ary=['a','b','c'];
ary.includes('a');                               
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
372 views
Welcome To Ask or Share your Answers For Others

1 Answer

Element.classList is a DOMTokenList object, though it prints an array-like in console. But if you try on Firefox, it'd return DOMTokenList["main-nav"]

And, includes is a method of Array instead of DOMTokenList.

Which is why it's expected to encounter li.classList.includes is not a function in your case.

You can use ES2015 spread operator to cast it to be an array.

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

Or alternatively, you can use DOMTokenList.contains method.

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

Why is it declared as includes instead of has or contains? (thanks to @akinuri)

Quoting from the proposal

The web has classes like DOMStringList and DOMTokenList which are array-like, and have methods named contains with the same semantics as our includes. Unfortunately, meshing with those is not web-compatible.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...