Hig*_*ley 2 javascript google-chrome-devtools
我正在尝试在我的HTML页面上配置下一个JavaScript代码:
var langs = document.getElementsByClassName('ss-code-language');
for (var i in langs)
{
langs[i].classList.remove('ss-highlighted');
document.getElementById('assa').classList.remove('ss-highlighted');
}
Run Code Online (Sandbox Code Playgroud)
它运作正常.但是当我删除下一行时:
var langs = document.getElementsByClassName('ss-code-language');
for (var i in langs)
{
langs[i].classList.remove('ss-highlighted');
}
Run Code Online (Sandbox Code Playgroud)
我明白了
未捕获的TypeError:无法调用undefined的方法'remove'.
但我在Watch中看到该项目已定义.下一行代码如何影响前一行.
document.getElementsByClassName('ss-code-language') 返回类似数组的对象而不是数组.
elements是找到元素的HTMLCollection.
在 for (var i in langs)你实际上循环遍历所有对象的属性.
循环通过HTMLCollection:
collection = document.getElementsByClassName('ss-code-language');
var len = collection.length //see below - accessing length is expensive!
for(var i=0; i<len; i++){
collection.item(i) /* ... */
}
Run Code Online (Sandbox Code Playgroud)
修复:length建议在使用HTMLCollection时缓存属性.更多信息请访问:
(感谢@Benjamin Gruenbaum)