我正在尝试编写一个脚本,该脚本通过论坛评论列表(使用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中的所有值,而不仅仅是第一个匹配的值!
答案 0 :(得分:0)
每次输入for循环时,将评估一个与您的计数器i不同步的新长度。使用postsToDelete.slice()或:
执行初始数组的副本替换此行:
for (var i = 0; i < postsToDelete.length; i++)
与
while(postsToDelete.length){
var post = postsToDelete[0];
...