javascript - 使用 D3.js 为每个数据成员附加多个非嵌套元素

标签 javascript dom d3.js

我想使用 d3 创建多个非嵌套元素来创建这样的结构:

    <div id="parent">
        <p> from data[0] </p>
        <p> from data[0] </p>

        <p> from data[1] </p>
        <p> from data[1] </p>

        <p> from data[2] </p>
        <p> from data[2] </p>
    </div>

创建嵌套结构会像这样

    d3.select('#parent').selectAll('p').data(data).enter().
           append('p')...append('p')

但我想即使在追加之后也能保持原来的选择,所以我可以继续追加到父元素。谢谢!

最佳答案

惯常的做法嵌套:

var divs = d3.select('#parent').selectAll('p').data(data).enter().append('div');

divs.append('p')
divs.append('p')

它创建:

<div id="parent">
  <div>
    <p> from data[0] </p>
    <p> from data[0] </p>
  </div>

  <div>
    <p> from data[1] </p>
    <p> from data[1] </p>
  </div>

  <div>
    <p> from data[2] </p>
    <p> from data[2] </p>
  </div>
</div>

如果这不起作用,请保存您的选择并重复追加:

var enterSelection = d3.select('#parent').selectAll('p').data(data).enter();

enterSelection.append('p')
enterSelection.append('p')

然后对您添加的内容进行排序:

d3.select('#parent').selectAll('p').sort(function(a, b){ return a.index - b.index; })

您需要将 index 属性添加到描述排序顺序的 data 的每个元素。正常的 i 仅在特定选择的上下文中定义,当我们重新选择时它会丢失。

关于javascript - 使用 D3.js 为每个数据成员附加多个非嵌套元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21485981/

相关文章:

javascript - 无法使用 updateNg1Component() 在 Angular 2 应用程序中使用 Angular 1 指令

javascript - 如何在未定义的 getElementsByClass 上运行 addEventListener?

javascript - D3.stratify 未捕获错误 : ambiguous: Distributive property

javascript - 如何在 d3.js 中将单栏制作为 3d 效果?

javascript - 如何处理多个用户的localStorage?

JavaScript - 将 UTF8 编码/解码为十六进制以及十六进制为 UTF8

javascript - 鼠标点击调用函数

javascript - 设置嵌套 div 以填充所有父级

javascript - .innerHTML 丢失 HTML 语法格式

javascript - 如何正确使用D3中的call()来绑定(bind)拖动行为?