使用 D3.js 将每五个 svg 元素包装在一个 div 中

evnartabt

是否可以使用javascript(不是jquery)将五个svg包装在一个div中,并将每五个新创建的div包装在另一个div中?

这是我的代码

d3.csv("example.svg", function(data) {

data.forEach(function(d){

var svgContainer = d3.select(".parentclass").append("svg")
                                    .attr("width",55)
                                    .attr("height",35);

var rectangle = svgContainer.append("rect")
                     .attr("x",0)
                     .attr("y",0)
                     .attr("width",55)
                     .attr("height",35)
                     .attr("fill", "rgb(" + d.r + "," + d.g + "," + d.b + ")");

 })

 });

我想要的输出是

<div class="column1">
<div class="line">
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg></div>
<div class="line">
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg></div>   
 <div class="line">
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg></div>    
 <div class="line">
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg></div>    
 <div class="line">
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg></div>    
</div>

<div class="column2">
<div class="line">
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg></div>
<div class="line">
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg></div>   
 <div class="line">
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg></div>    
 <div class="line">
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg></div>    
 <div class="line">
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg>
 <svg width="55" height="35">....</svg></div>    
</div>

可能的解决思路1:

我在 var svgContainer 之前添加了以下代码,但所有 svg 都添加到第一个孩子。

if ((i % 5 == 0) || (i == 0)) {

  var body = d3.select('.parentclass')
    .append('div')
    .attr('class','childclass');
    } 

    i = i + 1;

可能的解决方案想法2:

var svgContainer = d3.select(".milk").filter(function(i){ return ((i % 5 === 0) || (i === 1)); }).append("div")
                                            .append("svg")
                                            .attr("width",55)
                                            .attr("height",35);


var test = function (i) {
  i = i + 1;
  return i;

}

关于如何制作他的作品的任何想法?

花花公子

这是一个如何执行此操作的示例 - 请记住,data它还可以接收一个函数,该函数可以返回您需要的任何结构。

编辑:更新以显示如何依次收听项目

var data = [1,2,3,4,5,6,7];
var columns = 2;

d3.select('.container').selectAll('.column').data(d3.pairs(d3.range(0, data.length, Math.floor(data.length / columns))))
  .enter().append('div').attr('class', 'column')
  .selectAll('.item').data(d =>  data.slice(d[0], d[1]))
  .enter()
  .append('div')
  .attr('class', 'item')
  .append('svg')
  .append('text').text(d => d).attr('y', 20)
.container {
  background: lightblue;
  padding: 5px;
}

.item {
  background: lightcyan;
  padding: 5px;
  margin: 5px;
}

.column {
  background: lightgreen;
  padding: 5px;
  margin: 10px;
}

text { 
  fill: black;
  stroke: black;
  font-size: 20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<div class="container"></div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

对于循环,将每两个帖子包装在一个div中

来自分类Dev

TinyMCE-将多个元素包装在一个div中

来自分类Dev

使用jQuery中的类将元素包装在另一个内部

来自分类Dev

将每两个 div 包装在每个父 div 中的一个 div 中

来自分类Dev

React.js错误“相邻的JSX元素必须包装在一个封闭的标签中”

来自分类Dev

React:将每3个组件包装到一个div中

来自分类Dev

使用Android Studio将现有布局元素包装在另一个布局中

来自分类Dev

如何使用 d3.js 选择一个 svg 元素并修改其属性?

来自分类Dev

将多条路径合并到一个D3(SVG)中

来自分类Dev

将每个图像包装在div中并添加一个数字

来自分类Dev

当我使用D3将鼠标悬停在第二个SVG的元素上时,如何更改SVG中的元素的属性

来自分类Dev

使用数据集中的d3.js在svg的g元素中添加两个不同的svg元素

来自分类Dev

D3将现有的SVG字符串(或元素)附加(插入)到DIV中

来自分类Dev

将<img>元素包装在<div>中,但允许使用<a>标签

来自分类Dev

将<img>元素包装在<div>中,但允许使用<a>标签

来自分类Dev

使用Moshi&Retrofit将响应包装在另一个对象中

来自分类Dev

C++:使用模板将任何 lambda 包装在另一个 lambda 中

来自分类Dev

如何将输入的文本分组到数组中并将每 20 个字符包装在一个 div 中

来自分类Dev

节点删除的D3更新始终删除SVG DOM中的最后一个条目

来自分类Dev

DIV在JS的DIV中包装两个不同的元素

来自分类Dev

d3 svg attrtween 每一个

来自分类Dev

我无法使用D3看到第一个对象数据的div

来自分类Dev

使用foreignObjects将节点的文本包装在D3树中

来自分类Dev

使用foreignObjects将节点的文本包装在D3树中

来自分类Dev

使用 d3.js 选择 svg 的最后一个路径

来自分类Dev

React 组件列表返回 D3 SVG 图像与列表中的第一个图像完全相同

来自分类Dev

如何在另一个div内的div中动态包装元素?

来自分类Dev

使用d3.js在多个div上创建SVG

来自分类Dev

如何仅将第 3 个 div 包装在第 2 个 div 下?我应该使用 flexbox 吗?

Related 相关文章

  1. 1

    对于循环,将每两个帖子包装在一个div中

  2. 2

    TinyMCE-将多个元素包装在一个div中

  3. 3

    使用jQuery中的类将元素包装在另一个内部

  4. 4

    将每两个 div 包装在每个父 div 中的一个 div 中

  5. 5

    React.js错误“相邻的JSX元素必须包装在一个封闭的标签中”

  6. 6

    React:将每3个组件包装到一个div中

  7. 7

    使用Android Studio将现有布局元素包装在另一个布局中

  8. 8

    如何使用 d3.js 选择一个 svg 元素并修改其属性?

  9. 9

    将多条路径合并到一个D3(SVG)中

  10. 10

    将每个图像包装在div中并添加一个数字

  11. 11

    当我使用D3将鼠标悬停在第二个SVG的元素上时,如何更改SVG中的元素的属性

  12. 12

    使用数据集中的d3.js在svg的g元素中添加两个不同的svg元素

  13. 13

    D3将现有的SVG字符串(或元素)附加(插入)到DIV中

  14. 14

    将<img>元素包装在<div>中,但允许使用<a>标签

  15. 15

    将<img>元素包装在<div>中,但允许使用<a>标签

  16. 16

    使用Moshi&Retrofit将响应包装在另一个对象中

  17. 17

    C++:使用模板将任何 lambda 包装在另一个 lambda 中

  18. 18

    如何将输入的文本分组到数组中并将每 20 个字符包装在一个 div 中

  19. 19

    节点删除的D3更新始终删除SVG DOM中的最后一个条目

  20. 20

    DIV在JS的DIV中包装两个不同的元素

  21. 21

    d3 svg attrtween 每一个

  22. 22

    我无法使用D3看到第一个对象数据的div

  23. 23

    使用foreignObjects将节点的文本包装在D3树中

  24. 24

    使用foreignObjects将节点的文本包装在D3树中

  25. 25

    使用 d3.js 选择 svg 的最后一个路径

  26. 26

    React 组件列表返回 D3 SVG 图像与列表中的第一个图像完全相同

  27. 27

    如何在另一个div内的div中动态包装元素?

  28. 28

    使用d3.js在多个div上创建SVG

  29. 29

    如何仅将第 3 个 div 包装在第 2 个 div 下?我应该使用 flexbox 吗?

热门标签

归档