element.classList返回一个类数组,我的理解.includes()与数组一起使用,所以我不明白为什么这不起作用,我知道我可以使用.contains()和classList,但我很好奇为什么.includes()不起作用.
两者都是数组,如果我输入这个例如它不会工作
var li=document.createElement('li'); li.classList.add('main-nav'); li.classList.includes('main-nav');
但这会
var ary=['a','b','c']; ary.includes('a');
解决方法
Element.classList
是一个
DOMTokenList对象,虽然它在控制台中打印出类似数组的对象.但是如果你尝试使用Firefox,它会返回DOMTokenList [“main-nav”]
并且,includes是Array而不是DOMTokenList的方法.
这就是为什么它会遇到li.classList.includes在你的情况下不是一个函数.
您可以使用ES2015 spread operator将其强制转换为数组.
[...li.classList].includes('main-nav')
或者,您可以使用DOMTokenList.contains方法.
li.classList.contains('main-nav')
为什么它被声明为包含而不是has或contains? (感谢@akinuri)
引自proposal
The web has classes like 07008 and 07001 which are array-like,and have methods named 070010 with the same semantics as our 07002. Unfortunately,meshing with those is not web-compatible.