我在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会在这里失败以及如何使其工作?
谢谢!
答案 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
。