document.evalute 无法处理 RSS 提要页面
document.evalute not working on RSS feeds page
我在 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,而我知道有一个 div 元素的 ID 'feedContent'。我可以从 HTML Inspector 确认这一点,也可以在同一个 Scratchpad window:
的上述代码行下方尝试确认
alert(document.getElementById('feedContent'));
为什么 document.evaluate 会在这里失败以及如何让它工作?
谢谢!
我还没有完全理解它,但显然,您的 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 将 return 1
.
我在 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,而我知道有一个 div 元素的 ID 'feedContent'。我可以从 HTML Inspector 确认这一点,也可以在同一个 Scratchpad window:
的上述代码行下方尝试确认alert(document.getElementById('feedContent'));
为什么 document.evaluate 会在这里失败以及如何让它工作?
谢谢!
我还没有完全理解它,但显然,您的 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 将 return 1
.