D3.js附加错误的位置

时间:2015-12-14 16:48:06

标签: javascript d3.js svg

以下是我的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">的子项。 此外,数据中的第一项根本没有附加。

任何建议都表示赞赏!

1 个答案:

答案 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是六个中的一个,因此它不是输入而且不会附加。