遍曆文檔內容,得到HTML層級結構

來源:互聯網
上載者:User

標籤:lis   深度優先   深度優先遍曆   ntc   item   訪問   use   產生   span   

嗯。。沒發現有寫好的,那就自己寫一個,剛好自己今天看了DOM操作的知識點,鞏固一下。

HTML可以表示為一個階層,產生的DOM Tree 就是類似與資料結構中的樹一樣,每個DOM節點都有它的childNodes(動態類數組對象), parentNode(指向父節點),nextSibling(下一個兄弟節點),previousSibling(上一個兄弟節點),還有輔助類的firstChild和lastChild。

因為不同瀏覽器中對節點的遍曆處理的不一樣,比如:

<ul id = "mylist">        <li>Item 1</li>        <li>Item 2</li>        <li>Item 3</li></ul>

如果是IE解析,ul 元素會有3個子節點,而其他瀏覽器,ul 元素有七個子節點,包括3個 li 元素和 4個文本節點(<li>元素之間的空格),所以如果只想訪問當前節點的元素子節點,在用childNodes遍曆的時候需要先判斷一下子節點的nodeType,如果等於1(element node),再執行想要的操作。

H5對DOM操作也做了響應的擴充, 提供firstElementChild, lastElementChild, previousElementChild, nextElementChild 這樣的更方便的元素遍曆方式。

所以這道題就可以用樹的深度優先遍曆DOM Tree,來列印出HTML的層級結構。

代碼如下:

//用document.write輸出的時候:var space = ‘‘;        function renderD(node, space) {            if(node === null) return;            var child = node.firstElementChild;            space += ‘&nbsp;&nbsp;&nbsp;&nbsp;‘;            while(child != null && child.nodeName.toLowerCase() != ‘br‘) {                document.write(space + child.nodeName + ‘<br>‘);                renderD(child, space);                child = child.nextElementSibling;            }        }        renderD(document, space);
//用console輸出的時候var space = ‘‘;        function renderD(node, space) {            if(node === null) return;            var child = node.firstElementChild;            space += ‘    ‘;            while(child != null) {                  console.log(space + child.nodeName + ‘\n‘);                renderD(child, space);                child = child.nextElementSibling;            }        }renderD(document, space);

註:文檔的根節點是document

在JS紅寶書中289頁,我覺得它的元素遍曆不對。。 那個while迴圈的條件完全就忽視掉了當前節點的最後一個子項目啊囧

遍曆文檔內容,得到HTML層級結構

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.