document.getElementsByClassName()有效,但不一致

时间:2013-12-09 19:14:36

标签: facebook twitter greasemonkey social

我正试图创建一个从网站上删除facebook和twitter的greasemonkey脚本。 在我的情况下9gag。 我看了,我需要隐藏课程:

1. 'social-action' (works fine)
2. 'badge-sticky-social sticky-social' (every second post)
3. 'post-afterbar-a in-list-view' (every second post)

我的代码到目前为止(不同的类)

(function() {
   var ads=document.getElementsByClassName('badge-sticky-social sticky-social');
   for (var i=0; i<ads.length; i++) {
      ads[i].parentNode.removeChild(ads[i]);
   }
})()

我不知道为什么它只适用于一半的帖子而不是全部

1 个答案:

答案 0 :(得分:0)

因为您正在删除正在迭代的元素,所以迭代最终会出错。也就是说,你看第一个,然后删除它,然后尝试查看第二个。但是第二个现在是第一个,所以一个被跳过。

正如CBroe所说,解决方案是将循环从高到低运行,这样你就不会尝试计算已被删除的东西:

for (var i=ads.length-1; i>=0; i--)