document.getElementsByTagName("a")错过了一个链接

Blo*_*n2k 3 javascript greasemonkey

我正在为Greasemonkey(FX7)编写一个脚本,尝试删除某些链接并发现由于某种原因,源中存在的一个,不是由JS隐藏或构造的,没有出现在该函数返回的数组中.

如果在运行该页面时通过JS构建了那个,它就不会让我感到惊讶,但它正好位于另一个找到的链接后面.

那么有谁知道为什么会这样,以及我如何解决它?

var links = document.getElementsByTagName("a");
for (var l in links){
  if (links[l].href == "blah"){ ... }
}
Run Code Online (Sandbox Code Playgroud)

多数民众赞成我是如何尝试与他们合作的,有点减少,因为我有一些更多的检查,没有遇到空的等等.

在旁注:我想知道为什么该函数也会返回空条目.

编辑:我很久以来就通过了这个问题我找到了帮助并找到了一个很好的方法:

for (var i = 0, l; l = links[i]; i++) { }
Run Code Online (Sandbox Code Playgroud)

这样可以将l设置为当前链接,直到没有任何剩余.工作得很好.

Yur*_*kiy 7

for ... in语句循环遍历对象的属性.在这种特殊情况下,您将迭代Array对象属性.请尝试使用此脚本:

var links = document.getElementsByTagName("a");
for (var l = 0; l < links.length; l++){
  if (links[l].href == "blah"){ ... }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果`...`包括删除链接,请确保在该部分后面有`l - `,否则由于NodeList存在而跳过后面的那个.或者,从`for(var l = link.length-1; l> = 0; l - )`开始 (7认同)