为什么这个树的布局给了我一个无限的循环
Why is this tree layout giving me an infinite loop?
我是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中逐步调试调试器,问题位于apportion
方法内部。while循环从不中断。更具体地说,d3_layout_treeRight
和d3_layout_treeLeft
方法(我认为它们分别试图找到第一个子和最后一个子)只是在当前节点是叶子时返回当前节点。
node._tree.thread
的值是d3_layout_treeRight
和d3_layout_treeLeft
内部的当前节点。因此,对这些方法的调用会返回作为参数传入的节点。
正如d3-js-google组中所描述的,问题是我使用了beanNode.getElementsByTagName("*")
而不是beansNode.childNodes
。
相关文章:
- 为什么我使用javascript获得了一个无限的for循环
- 我如何从一个无限滚动的网站抓取图像,其中api是隐藏的,我无法通过使用Inspect Element获得它->网络
- javascript停止一个无限循环
- 我怎么能用Codeigniter在可滚动的部分创建一个无限向下滚动的网格加载程序呢
- setTimeout 会创建一个无限循环
- Javascript [Prototype/Scriptaculous] - 创建一个无限的单向幻灯片
- 为什么我有一个无限循环
- JS:显示一个无限长的坐标系统(网格)
- 为什么(;;){…}是一个无限循环
- 为什么“;window=window.parent"创建一个无限循环
- 把我的折线放在一个无限循环中
- 为什么这个树的布局给了我一个无限的循环
- JavaScript:为什么这会导致一个无限循环
- 两个同步事件创建了一个无限循环
- 为什么我的javascript代码会进入一个无限循环
- 为什么这会导致一个无限循环
- 在一个无限循环风格的展示中预先加载相邻的条目
- addEventListener创建了一个无限循环
- 为什么这个while循环产生一个无限迭代
- 在Jquery中创建一个无限循环