Javascript NodeList循环退出更改?

时间:2014-03-31 05:42:22

标签: javascript greasemonkey

我正在尝试编写一个脚本,该脚本通过论坛评论列表(使用Vanilla论坛软件)并为所有与给定用户名匹配的评论添加“埋藏”类(从Username类中提取)。这样可以正常工作,除了下面的循环在第一次更改后似乎退出,我无法弄清楚为什么或如何发生这种情况。

var userlist = [
    'Flowerpot',
];

var postsToDelete = document.querySelectorAll('.ItemComment');

    console.log(postsToDelete.length);

for (var i = 0; i < postsToDelete.length; i++)
{
    var username = postsToDelete[i].getElementsByClassName('Username')[0].innerHTML;
    if (userlist.indexOf(username) >=0)
    {
        postsToDelete[i].className += ' Buried';
        var author_info = postsToDelete[i].querySelectorAll('.AuthorLocation');
        author_info[0].innerHTML = '';
    }
    console.log(i);
}

例如,在页面上运行脚本时会返回以下控制台输出:

25 (postsToDelete.length)
0 (first post that doesn't match..)
1 (second..)

由于索引2是一个与上面的if语句匹配的帖子,它将该类应用于帖子,然后退出而没有错误(从我能看到的内容)并且不再进一步。

我该如何解决这个问题?我希望脚本遍历postsToDelete中的所有值,而不仅仅是第一个匹配的值!

1 个答案:

答案 0 :(得分:0)

每次输入for循环时,将评估一个与您的计数器i不同步的新长度。使用postsToDelete.slice()或:

执行初始数组的副本

替换此行:

for (var i = 0; i < postsToDelete.length; i++)

while(postsToDelete.length){
  var post = postsToDelete[0];
  ...