document.evaluate不在RSS feed页面上工作

时间:2015-03-30 16:31:31

标签: javascript firefox xpath rss firefox-addon

我在Firefox中使用的是标准' document.evaluate'到目前为止一直在为其他一切工作的方法。但是在这样的RSS提要页面上:

http://msutoday.msu.edu/rss/all/

即使是简单的查询也不适合我。当我在Firefox中打开此页面时,从开发人员工具(Shift + F4)打开Scratchpad并尝试

var nodesSnapshot = document.evaluate("//div[@id='feedContent']", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
alert(nodesSnapshot.snapshotLength);

结果为0,而我知道有一个带有id' feedContent'的div元素。我可以从HTML Inspector中确认这一点,也可以在同一个Scratchpad窗口中尝试上面的代码行:

alert(document.getElementById('feedContent'));

为什么document.evaluate会在这里失败以及如何使其工作?

谢谢!

1 个答案:

答案 0 :(得分:1)

我还没有完全理解它,但显然,你的JS是根据该页面的源文档进行评估,这将是一个RSS提要。

相反,浏览器将提要封装在XHTML包装器(提要处理程序)中,其中最外层元素带有默认命名空间。因此,此div元素位于命名空间中。如果将表达式更改为更通用的内容,而不是直接涉及元素名称:

var nodesSnapshot = document.evaluate("//*[@id='feedContent']", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );

var nodesSnapshot = document.evaluate("//*[local-name() = 'div' and @id='feedContent']", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );

alert(nodesSnapshot.snapshotLength);

Scratchpad将返回1