javascript检查子节点是否为元素或文本节点

tal*_*abi 14 javascript node.js

我有以下问题childNodes:

 <ol>
    <li>Coffee</li>
    <li>Tea</li>
    <li>Coca Cola</li>
 </ol>
 //childNodes.length = 7
Run Code Online (Sandbox Code Playgroud)

<ol><li> Coffee </li><li> Tea </li><li> Coca Cola </li></ol>
//childNodes.length = 3
Run Code Online (Sandbox Code Playgroud)

似乎每个\n或被textnode认为是child,我怎么能从中删除这些childNodes

Har*_*rry 28

您可以使用nodeType.来检查给定的子节点是否是文本节点.文本节点将具有nodeTypeas 3.我们可以使用数字或常数Node.TEXT_NODE进行检查.

window.onload = function() {
  var el = document.getElementsByTagName('ol')[0].childNodes; // using [0] as there is only one ol in the demo
  console.log('Print with text nodes');
  for (var i = 0; i < el.length; i++) { // will output all nodes with "undefined" for text nodes
    console.log(el[i].innerHTML);
  }
  console.log('Print without text nodes');
  for (var i = 0; i < el.length; i++) { // will output only non text nodes.
    if (el[i].nodeType != Node.TEXT_NODE) // or if (el[i].nodeType != 3)
      console.log(el[i].innerHTML);
  }
}
Run Code Online (Sandbox Code Playgroud)
<ol>
  <li>Coffee</li>
  <li>Tea</li>
  <li>Coca Cola</li>
</ol>
Run Code Online (Sandbox Code Playgroud)

  • 嘿,好的答案,你也可以使用常量`Node.TEXT_NODE`而不是无意义的`3`. (5认同)