Javascript 为什么这个树布局给了我一个无限循环?

Javascript 为什么这个树布局给了我一个无限循环?,javascript,d3.js,Javascript,D3.js,我是d3新手,尝试对一些xml数据进行简单的树布局。我在一些d3代码中得到了一个无限循环,并试图找出原因。这里是我正在做的一个简化,我仍然看到无限循环 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" cont

我是d3新手,尝试对一些xml数据进行简单的树布局。我在一些d3代码中得到了一个无限循环,并试图找出原因。这里是我正在做的一个简化,我仍然看到无限循环

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Spring Integration Inspector</title>
<script src="js/d3.js"></script>
<script type="text/javascript">
var parser = new DOMParser();
var xml = parser.parseFromString("<beans><bean/><bean><beanChild/></bean></beans>", "text/xml");

var tree = d3.layout.tree().children(function(beanNode) {
    var children = beanNode.getElementsByTagName("*");
    if (children.length > 0) {
        return children;
    } else {
        return null;    
    }
});

var nodes = tree.nodes(xml),
    links = tree.links(nodes);
</script>
</head>
<body>
<div id="graph"></div>
</body>
</html>
要复制,请将此代码复制到index.html文件中,并适当地包含d3.js库。这将不会加载到浏览器中。我认为这与儿童功能有关

编辑:

我正在chrome中逐步调试调试程序,问题出在分摊方法内部。while循环从不中断。更具体地说,d3_layout_treeRight和d3_layout_treeLeft方法(我认为它们分别尝试查找第一个子级和最后一个子级)只是在当前节点为叶时返回当前节点


node._tree.thread的值是d3_layout_treeRight和d3_layout_treeLeft中的当前节点。因此,对这些方法的调用将返回作为参数传入的节点。

如,问题是我使用了beanNode.getElementsByTagName*而不是beanNode.childNodes。

我建议使用F12打开调试器Firefox可能需要FireBug用于web浏览器中的F12,并查看是否可以单步执行脚本代码或看到错误。子项可以为空吗?还是应该返回一个空数组?是的。我做了一些调试。我会更新这个问题来解释我看到了什么。