2014-04-03 41 views
1

我所附2“P”的标签到虚拟页面的主体像这样:为什么d3 exit()的长度比预期的要长?

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Document</title> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.4/d3.min.js"></script> 
</head> 
<body> 

    <h1>Hello world</h1> 
    <p></p> 
    <p></p> 
</body> 
</html> 

然后我运行下面的命令到一个数字的阵列结合第一“P”标记和返回D3的退出选择所有“p”标签:

d3.selectAll('p').data([1]).exit(); 

D3然后返回以下(从Chrome浏览器开发工具控制台复制):

[ Array[2]    
1: p 
length: 2 
parentNode: html 
__proto__: Array[0] 
] 

我看不出有0个元素在这个数组中,但我确实看到了第一个元素(没有数据绑定的'p'标签)。 d3告诉我这个数组的长度是2,那么第0个元素是什么,为什么它不显示在这里?

切线问题 - 我对exit()函数的理解是,它返回选择中未绑定到任何数据的元素。那么为什么这个数组2的长度(听起来像它代表了绑定和非绑定'p'标签)而不是1(只是没有数据绑定的'p'标签)?

回答

1

退出选择来自整个选择,在你的情况下包含两个元素。这里的重要一点是选择 - 它不是一个数组。在很多方面,它的行为类似于数组,你可以用数组做很多事情,但是这些函数依赖于自定义实现来处理选择。

所以基本上你从调试器得到的输出在这里有点误导。它是一个具有数组属性的对象(这是Chrome用来显示它的内容),但它不是一个真正的数组。

重要的是最终的结果是正确的元素在正确的位置,正如你所观察到的,情况就是如此。

相关问题