如何递归打印DOM内容?

时间:2014-09-29 12:10:49

标签: javascript

我试图以递归方式打印DOM内容。

(function print (node) {
    for (var i = 0, elem; i < (elem = node.childNodes[i]); i++) {
        print(elem);
    }
})(document.documentElement);

当我在浏览器控制台中激活我的代码时,我得到了

undefined

我做错了什么?

4 个答案:

答案 0 :(得分:2)

试试这个:(它适用于chrome,我不确定每个浏览器是否都有相同的文档结构)

(function print (node) {
    console.log(node)
    var childNodes = node.childNodes;
    for (var i = 0; i < childNodes.length; i++) {
        print(childNodes[i]);
    }
})(document);

编辑:警告,控制台打印速度相当慢,请注意:P
更新:已删除&#34; elem&#34;因为它没有使用,我只是忘了删除它

答案 1 :(得分:2)

function traverseDOM(node){
    var result = node.tagName;
    if (node.hasChildNodes()) {
      var child = node.firstChild;
      while (child) {
        if (child.nodeType === 1) {
          result += traverseDOM(child)
        }
        child = child.nextSibling;
      }
    }
    return result;
  }
 console.log(traverseDOM());

答案 2 :(得分:0)

取决于它是激光打印机还是点阵打印机。

我建议使用TreeWalker API,以此为生。

var node;
var walker = document.TreeWalker(document, 
    NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT);

while (node = walker.nextNode) { console.log(node); }

这也可以避免任何递归/堆栈溢出问题,尽管实际上即使在非常深的DOM的情况下也可能不是问题。

答案 3 :(得分:0)

function print(document){
    var data=document.documentElement;
    for(var i=0;i<data.childNodes.length;i++)
    {
        print(data.childNodes[i]);
    }
}
console.log(documentdocumentElement)