Javascript d3.js-enter()序列中的空selectAll()无效?

Javascript d3.js-enter()序列中的空selectAll()无效?,javascript,d3.js,Javascript,D3.js,当选择为空时,标准的enter().append()序列中的初始selectAll(…)的效果如何?似乎只有append有任何效果。例如: index.html(节略) 创造 <div id="example"> <p>a</p> <p>b</p> <p>c</p> </div> a b c “福”在哪里?如果我们做的是一个空的选择,那么我们在selectAll中输入的内容有关系吗

当选择为空时,标准的
enter().append()
序列中的初始
selectAll(…)
的效果如何?似乎只有
append
有任何效果。例如:

index.html(节略)

创造

<div id="example">
  <p>a</p>
  <p>b</p>
  <p>c</p>
</div>

a

b

c

“福”在哪里?如果我们做的是一个空的选择,那么我们在
selectAll
中输入的内容有关系吗

例如,能够执行
selectAll(“.foo”).enter().append(“p”)
将所有创建的
添加到类中,而不是执行所需的
…append(“p”).attr(“class”,“foo”)


我遗漏了什么吗?

对于空选择,只要选择器与任何现有元素不匹配(否则它将不是空选择),那么
selectAll()中的内容就无关紧要了。至于为什么不能用(“.foo”)进行空选择来设置输入元素的类,我只能猜测Mike的感受:如果选择为空,selectAll()选择器不会设置输入元素的类或类型,因为这样的行为会根据选择是否为空而改变(因为您并不总是希望选择器影响附加在非空选择中的内容)。显式进行空选择是一种常见的方法。感谢@AndrewReid,这对它的作用以及为什么它不应该是任何其他方式很有意义。感谢链接,我没有看到那篇文章。
var data = ["a", "b", "c"];

var vis = d3.select("#example");

vis.selectAll("foo")
    .data(data)
    .enter()
    .append("p")
    .text(function(d) { return d; });
<div id="example">
  <p>a</p>
  <p>b</p>
  <p>c</p>
</div>