以下是我的DOM结构的简化版本:
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.1"
id=""
viewBox="0 0 745 471">
<defs
id="defs3367" />
<g
style="display:inline"
transform="translate(0,-520.8662)"
id="items">
<rect
ry="0"
rx="0"
y="812.9881"
x="5.7393227"
height="42.501518"
width="733.25098"
id="rect3410">
</g>
</svg>
我有以下D3.js代码:
var svgBlock = d3.select("svg");
var items = svgBlock.selectAll("g#items")
.data(data)
.enter()
.append("g");
我的数据是一个包含6个对象的数组。
问题是此代码会将 5 <g>
添加到svg
,而不是<g id="item">
的子项。
此外,数据中的第一项根本没有附加。
任何建议都表示赞赏!
答案 0 :(得分:1)
d3
会附加到您正在调用追加的所选对象(在本例中为svg
标记)。
要附加到目标g
,请执行:
svgBlock.select("g#items") //<-- appending to this g
.selectAll("g") //<-- a selector that matches WHAT you want append
.data(data)
.enter()
.append("g");
事实上,这也应该修复你的“缺失”元素。您当前编写代码的方式d3
认为g#items
是六个中的一个,因此它不是输入而且不会附加。