无法删除课程

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中看到该项目已定义.下一行代码如何影响前一行.

Tas*_*ple 5

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)