D3.js:select("body").selectAll("p")和selectAll("p")之间的区别?

Jia*_*Lim 12 javascript dom d3.js

有谁知道有什么区别?

我的理解是两者都会返回相同的选择.

但是,当我进行追加时,如果我使用selectAll("p")则不起作用.

例如,这有效:

var foo = d3.select("body").selectAll("p")
    .data([1,2,3,4])

foo.enter.append("p")
Run Code Online (Sandbox Code Playgroud)

虽然这不起作用:

var foo = d3.selectAll("p")
    .data([1,2,3,4])

foo.enter.append("p")
Run Code Online (Sandbox Code Playgroud)

为什么后者不起作用?

nra*_*itz 16

这里简短的回答是,"因为没有什么可以附加的." 虽然您是正确的d3.selectAll("p")并且d3.select("body").selectAll("p")将选择相同的现有节点,但选择body元素首先会为使用该方法添加的节点设置上下文.append().

在没有选择的情况下body,你没有在DOM树中插入你的节点 - 我猜d3试图将新节点附加到document对象,这导致HIERARCHY_REQUEST_ERROR 这里讨论.