无法删除课程

时间:2013-12-31 11:56:24

标签: 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');
}

它运作正常。但是当我删除下一行时:

var langs = document.getElementsByClassName('ss-code-language');
for (var i in langs)
{
    langs[i].classList.remove('ss-highlighted');
}

我得到了

  

未捕获的TypeError:无法调用未定义的方法'remove'。

但我在Watch中看到该项目已定义。下一行代码如何影响前一行。

4 个答案:

答案 0 :(得分:5)

document.getElementsByClassName('ss-code-language')返回一个类似数组的对象而不是数组。

  

元素是找到元素的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) /* ... */
 }

<强>修正: 使用HTMLCollection时,建议缓存length属性。更多信息见:

(感谢@Benjamin Gruenbaum)

答案 1 :(得分:1)

不确定第二行如何影响第一行,但您肯定会通过添加支票来解决它:

var langs = document.getElementsByClassName('ss-code-language');
for (var i in langs) {
    if (typeof langs[i].classList != 'undefined') {
        langs[i].classList.remove('ss-highlighted');
    }
}

答案 2 :(得分:0)

您可以使用console.log();用于调试:

示例:

var hello = "hello world!";
console.log(hello);

这会在网络浏览器控制台上打印“你好世界”。

对于您的问题,您应该在这里使用“typeof”来源帮助您 How to use "typeof"

这是一个解决方案:

var langs = document.getElementsByClassName('ss-code-language');
for (var i in langs){
   if ( typeof langs[i] === 'undefined' || 
        typeof langs[i].classList === 'undefined')
        continue;
   langs[i].classList.remove('ss-highlighted');       
}

我希望这能帮到你!

答案 3 :(得分:0)

这似乎是Chrome调试器的一个错误。 我在IE中测试了这个脚本,没关系。 此脚本可在Chrome中正常运行而无需调试。