【发布时间】:2019-11-17 09:40:57
【问题描述】:
如何遍历 HTML DOM 以递归方式获取每个元素的文本。我只需要获取 HTML 元素的文本而不需要子元素的文本。 考虑是否存在嵌套的 HTML 元素,那么如何获取第一个元素的文本,消除嵌套的子元素和相应的文本。
我试过“elem.InnerHTML”、“elem.InnerTEXT”、“elem.TextContent”,但这些似乎都回来了来自所有嵌套元素的文本。
代码示例: 我的 HTML 如下:
<HTML>
<HEAD></HEAD>
<BODY>
<DIV> SOMEDIVTEXT
<TABLE>
<TBODY>
<TR><TD>COLUMN1</TD></TR>
<TR><TD>COLUMN2</TD></TR>
</TBODY>
</TABLE>
</DIV>
</BODY>
</HTML>
我只需要在当前节点指针位于 DIV 时提取 SOMEDIVTEXT 而不获取嵌套子级的文本。
【问题讨论】:
-
提供minimal reproducible example,以便我们了解您的操作/方法以及出了什么问题
-
离题,但为什么你的
tbody元素在你的table元素之外? -
您尝试获取的文本存储在 DOM 中,是
div内元素的一个单独节点,因此单独提取它应该不难。到目前为止,您尝试过什么? -
@Spudley 这个 HTML 是在客户端生成的,不受我们控制。我们现在可以忽略 TBody,因为它并不总是这样。
-
所以,我的基本需求是遍历完整的 HTML DOM。我通过 TreeWalker 方法执行此操作,如下所示: var treeWalker = document.createTreeWalker( document.body, NodeFilter.SHOW_ELEMENT );