javascript - 如何获取 html 树的 #text 节点数组

标签 javascript dom

我需要将 html 正文的所有 #text 元素用作数组。 富文本可以有不同的级别,所以我需要到达最低的元素。 例如,对于下面的文本,我期望有一个包含 8 个元素的数组。

enter image description here

获取#文本节点的名称或标签或方法是什么?

最佳答案

您可以递归地扫描节点并将文本节点推送到数组中。

const textNodes = []

function pushTextNode(node) {
  if (node.nodeName === "#text") {
    const nodeVal = node.nodeValue.trim();
    if (nodeVal) {
      textNodes.push(nodeVal);
    }
    return;
  }
  node.childNodes.forEach((childNode) => {
    pushTextNode(childNode)
  });
}

pushTextNode(document.querySelector("#root"));
console.log(textNodes);
<div id="root">
  <span>
    0
    <b>
      12<u>3</u>
    </b>
    <u>
      4<b>5</b>
    </u>
    <b>67</b>8<a href="#">9</a>
  </span>
</div>

关于javascript - 如何获取 html 树的 #text 节点数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72250407/

相关文章:

javascript - 通过 Jquery 生成 HTML 的更好方法

parsing - 使用 PHP 简单 HTML DOM 解析器从 Div 类获取内容

javascript - 替代 </body> 标签内联 Javascript

jquery - 查找与类名最接近的元素

javascript - 使用 jQuery 用元素包裹元素内容的子字符串

javascript - 如何选择列表中的倒数第二个标签?

javascript - 在 AngularJS + Bootstrap 中动态添加下拉菜单

javascript - 如何在选择中对齐 <option> 中的部分文本

javascript - 使用 UIWebView 时奇怪的填充/边距

javascript - 使用 Raphael.js 放在前面并发光