D3.js附加了错误的位置

D3.js appending wrong location

本文关键字:错误 位置 js D3      更新时间:2023-09-26

这里是我的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">的子级。此外,数据中的第一项根本不会被附加。

欢迎提出任何建议!

d3追加到您正在调用append的所选对象(在本例中是您的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是六个中的一个,因此它不是输入,也没有附加。