Javascript递归不遍历链

标签 javascript html xml recursion

我正在尝试创建一个 HTML 页面,该页面允许我以与您阅读它们的方式大致相同的方式输出 XML 文件中元素的所有节点名称,例如:

<a>
 <b>
  <c></c>
 </b>
 <d>
  <e></e>
 </d>
</a>

将输出:

a
 b
  c
 d
  e

我使用 Javascript 函数递归遍历 XML 文档来实现此目的。然而,我创建的函数只遍历到最低级别一次,然后停止,产生,例如:

a
 b
  c

这是我的 Javascript 函数

function printChildren(node){
 if(node.childNodes.length > 1){
  y=xmlDoc.getElementsByTagName(node.nodeName)[0].childNodes;
  for(i=0;i<y.length;i++){
   if(y[i].nodeName!="#text"){
    document.write("<br>--->" + y[i].nodeName);
    alert(y[i].nodeName);
    printChildren(y[i]);
   };
  };
 };
};

我不确定我的方法是否错误,或者函数是否在完成第一级递归后就中断了。我正在 Mozilla Firefox 中对此进行测试,以防这是由于浏览器的某些怪癖造成的。

最佳答案

这是完成您想要完成的任务的一种方法,请确保您正确捕获节点。我使用了所有 HTML 来演示(JSFIDDLE:http://jsfiddle.net/6WNdZ/ - fiddle 似乎只在您点击运行后才显示):

<hmtl>
    <head>
        <script>
            function printChildren(node, depth) {
                if (!depth) { depth = 1; }
                for(var x = 0; x < node.childNodes.length; ++x) {
                    if (node.childNodes[x].nodeName == '#text') { continue; }
                    var space = '';
                    for(var y = 0; y < depth; ++y) {
                        space += "&nbsp;&nbsp;";
                    }
                    document.write(space + node.childNodes[x].nodeName + "<br />");
                    printChildren(node.childNodes[x], depth + 1);
                }
            }

            window.onload = function() {
                var root = document.getElementById('container');
                printChildren(root);
            }
        </script>
    </head>
    <body>
        <div id='container'>
            <a>
                <b>
                    <c></c>
                </b>
                <d>
                    <e></e> 
                </d>
            </a>
        </div>
    </body>
</html>

关于Javascript递归不遍历链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18497394/

相关文章:

java - 查看 JSP 站点中的时间戳是否超过 24 小时

php - HTML/CSS 可视化 RBAC 图

javascript - 选择由外部脚本动态创建的 iframe 中的元素

javascript - 从 JavaScript 访问 WCF WebService - 对预检请求的响应未通过访问控制检查

javascript - javascript中的动态 Accordion

java - 如何使用 Java 在 xml 中打印所选父标签内的子标签属性

xml - 根据子节点中的文本值删除父节点和所有子节点

xml - XQuery多个xml文件?

javascript - 有向图是否仅适用于包含 "source"和 "target"值的文件?

javascript - 执行 javascript 函数的右括号