JavaScript DOM 遍历

标签 javascript html dom

我正在尝试从 <article class="birds"> 获取所有 child ,但无法到达 <li class="bird">Hawk 中的这些内容...我正在尝试用递归来做到这一点。

function traverse (node){
    node = document.getElementsByClassName(node)[0];
    for(let i=0; i<node.childNodes.length; i++){
        let child = node.childNodes[i];
        if(child.nodeName == '#text'){
            continue;
        }else{
            console.log(child.nodeName.toLowerCase() + 
                        ": class=\"" + child.className +"\"");
            if(child.nodeType === document.ELEMENT_NODE){
                traverse(child.className);
            }
        }

    }
}
traverse('birds');

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <header>
        <h1>Living Creatures</h1>
    </header>
    <section>
        <article class="birds">
            <h2 class="birds-heading">Birds</h2>
            <ul class="birds-list">
                <li class="bird">Nightingale</li>
                <li class="bird">Owl</li>
                <li class="bird">Hawk
                    <ul>
                        <li class="sub-bird">Black Hawk</li>
                        <li class="sub-bird">Chicago Hawk</li>
                    </ul>
                </li>
                <li id="eagle" class="bird">Eagle</li>
                <li class="bird">Sparrow</li>
                <li class="bird">Falcon</li>
                <li class="bird">Blackbird</li>
            </ul>
        </article>
        <article class="mammals">
            <h2 class="mammal-heading">Mammals</h2>
            <ol class="mammal-list">
                <li id="dolphin" class="mammal">Dolphin</li>
                <li class="mammal">Elephant</li>
                <li class="mammal">Hyena</li>
            </ol>
        </article>

    </section>
    <script type="text/javascript" src="testing.js"></script>>
</body>
</html>

是因为<ul>元素没有类属性?我得到的输出是:

h2: class="birds-heading"
ul: class="birds-list"
li: class="bird"

最佳答案

根据我的理解,您正在尝试从容器 .birds 中获取所有 li。如果是,您可以直接使用 querySelectorAll 而不是手动遍历 DOM 并手动搜索。

function traverse(className, fetchElement){
  return document.querySelectorAll("."+className +" " + fetchElement)
}

console.log(traverse('birds', 'li'))
<section>
  <article class="birds">
    <h2 class="birds-heading">Birds</h2>
    <ul class="birds-list">
      <li class="bird">Nightingale</li>
      <li class="bird">Owl</li>
      <li class="bird">Hawk
        <ul>
          <li class="sub-bird">Black Hawk</li>
          <li class="sub-bird">Chicago Hawk</li>
        </ul>
      </li>
      <li id="eagle" class="bird">Eagle</li>
      <li class="bird">Sparrow</li>
      <li class="bird">Falcon</li>
      <li class="bird">Blackbird</li>
    </ul>
  </article>
  <article class="mammals">
    <h2 class="mammal-heading">Mammals</h2>
    <ol class="mammal-list">
      <li id="dolphin" class="mammal">Dolphin</li>
      <li class="mammal">Elephant</li>
      <li class="mammal">Hyena</li>
    </ol>
  </article>

</section>

关于JavaScript DOM 遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40651949/

相关文章:

javascript - 在移动设备上循环 <audio>

javascript - addEventListener:点击移除标签

javascript - DOM 节点生成 HTML5 可能吗?

.net - 从 javascript 调用 vb.net 类函数

html - 我如何为表格内的 div 应用 css?

javascript - 如何获取多选列表框的值(按单击顺序)?

html - 水平对齐不同高度的列表组(Bootstrap 3)

Javascript 未定义的innerHTML

php - 拉取php数据,使用split分隔字符串中的逗号,将数据发布到div中使用ajax每3秒刷新一次

javascript - CSS 文件离线工作,但上传到网络服务器时不工作