如何获取第一个 HTML 元素的文本

Posted

技术标签:

【中文标题】如何获取第一个 HTML 元素的文本【英文标题】:How to get text of first HTML element 【发布时间】: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 ); 【参考方案1】:

试试firstChild 属性。它获取文本节点。

例如:

document.body.firstElementChild.firstChild

适用于此代码示例。

【讨论】:

感谢您的指导。我试过了,但我需要遍历 HTML DOM 并获取所有元素的内部文本。通过您的代码,我将获得 TBODY 对象而不是 DIV。我的问题是,如果我的当前节点是 DIV,我想提取 DIV 内文(SOMEDIVTEXT)而不获取子内文。【参考方案2】:

好的,假设 (1) 您正在浏览器中编写 javascript,并且 (2) 您将元素作为对象(您在问题中提到了“elem”,所以我猜您有?),那么您可以使用elem.childNodes() 获取元素的子元素。

这将为您提供一个包含元素内每个节点的Nodelist 对象。对于您在问题中引用的 HTML,这将是两个节点;第一个是包含文本SOMEDIVTEXT 的文本节点,第二个是包含&lt;TABLE&gt; 元素的元素节点。

所以elem.childNodes[0] 会得到你试图提取的文本。

但是 DOM 非常灵活,因此还有其他属性和方法也可以获得相同的效果,包括另一个答案中提到的 'elem.firstChild'。

【讨论】:

以上是关于如何获取第一个 HTML 元素的文本的主要内容,如果未能解决你的问题,请参考以下文章

jquery如何获取第一个或最后一个子元素

如何使用简单的 HTML Dom 获取图像元素旁边的文本?

HTML5 - 如何获取 SVG 文本元素的中心点?

如何获取HTML中用户输入到文本框中的内容?

如何在ueditor中获取选中元素的css/attr等

JS中如何获取数组中的一部分元素