簡體   English   中英

JavaScript DOM遍歷

[英]JavaScript DOM traverse

我正在嘗試從<article class="birds">獲取所有子項,但是無法到達<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>元素沒有類attr嗎? 我得到的輸出是:

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

據我了解,您正在嘗試從container .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> 

你不能給li帶班birds-list ,因為父ul沒有一個class ,你的遍歷代碼依賴於一class

相反,您可以調整代碼以通過node遍歷。 我已經對您的代碼進行了更改,並且可以正常工作。

function traverse (node){
    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);
            }
        }

    }
}
traverse(document.getElementsByClassName('birds')[0]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM