1

我已经为Firefox安装了greasemonkey插件(我的FF版本是21.0)。我写了一个名为 mahesh.user.js 的用户脚本

var links = document.evaluate("//span", document.body, null, 6, null);

现在当我打印以下内容时

console.log(links);

Firebug 调试器写出 XPathResult 对象。但我无法使用任何 XPathResult 属性,例如 snapshotLength 或 iterateNext() 或 snapshotItem() 等方法。如果我这样做,控制台上不会打印任何内容。

IE

 var thisLink = links.iterateNext();

 console.log("I am here -- 111:  " + thisLink); 

  i = 0;

  while(thisLink) {
    console.log("thisLink #" + (++i));
  }

除了第一个“我在这里”之外,控制台上没有打印任何内容。

请需要帮助。好心劝告。

问候马赫什。

4

1 回答 1

2

如果您使用结果类型6,那么您将无法迭代,但您应该能够按如下方式访问项目:

for (var i = 0, l = links.snapshotLength; i < l; i++)
{
  var span = links.snapshotItem(i);
}

如果该循环没有产生任何结果,那么可能是因为 XPath 没有找到任何节点。原因可能是输入文档中的名称空间。

另一方面,如果您只是想查找所有span元素,那么做document.getElementsByTagName('span')就足够了,不需要 XPath。

至于您的document.evaluate("//span", document.body, null, 6, null);电话,如果您将第二项设置为与文档本身不同的节点,则您的路径应该是相对的,如 in document.evaluate(".//span", document.body, null, 6, null);,否则无论如何都会搜索整个文档。

于 2013-09-18T09:31:46.177 回答