有没有办法在DOM中获取节点的索引?

时间:2017-03-17 01:13:24

标签: java html dom offset

例如,如果我有一个HTML文档:

<html>
<body>
  <p>Hello</p>
  <p>World</p>
</body>
</html>

Hello将在18到22的索引处,而World将在32到36之间。

1 个答案:

答案 0 :(得分:1)

简短的回答是否定的。

DOM和HTML 相同。

DOM是一种树结构,它表示(模型化)文档的内容。在像HTML这样的语言(也是树形结构)中,DOM非常类似于源代码的结构,但它并不完全相同。

浏览器使用HTML构建DOM,但之后HTML并不重要。如果您有弱结构元素(例如<p>没有结束</p>)或者开始使用JavaScript操作它,情况尤其如此。

可以从DOM重构重构 HTML,但它不一定是相同的。这是因为您通常在HTML周围使用空格(包括换行符)以提高可读性。如果空格位于非文本元素中,则忽略空格,如果空格是混合元素,则将其添加到自己的文本节点。

如果原始HTML包含格式错误的代码,则重建也是不相同的。

使用DOM和JavaScript,以及一些明智的CSS选择器,您可以经常向前工作,并找到您拥有的。例如:

document.querySelector('html>body>p:nth-child(2)')

会在现代浏览器中找到第二段,但DOM无法知道原始HTML中数据的位置。

如果您不需要担心原始HTML,在白色空格,换行符和可能的格式错误的代码之前,那么可以通过重新构建HTML来找到您要查找的内容dom,只是搜索字符串。

否则,您需要将原始HTML作为字符串获取。如果您真的需要,要知道,您需要再次以文本形式获取页面。您可以使用Ajax执行此操作。