javascript - 使用 d3.js 复制整个 svg 元素

标签 javascript svg d3.js

我正在使用 d3.js 创建一个 rectangle,在该矩形内我正在创建 10 个较小的矩形`。

我想在鼠标单击时将整个内容复制到另一个 svg 元素中。

jsfiddle 代码链接:http://jsfiddle.net/nikunj2512/XK585/

代码如下:

var svgContainer = d3.select("body").append("svg")
.attr("width", 200)
.attr("height", 200);

//Draw the Rectangle
var rectangle = svgContainer.append("rect")
.attr("x", 10)
.attr("y", 10)
.attr("fill", "red")
.attr("width", 200)
.attr("height", 200);

var bigRectContainer = d3.select('#bigRectContainer').append('svg')
    .attr('width', 200)
    .attr('height', 200);
var dim = 20;
var x = 0;
var y = 0;
for (i = 1; i < 11; i++) {

    x = 10 + (i-1)*dim;
    //alert(x);
y = 10;

    svgContainer.append("rect")
        .attr("x", x)
        .attr("y", y)
        .attr("width", 20)
        .attr("height", 20)
        .style("fill", "black");
 }

 var bigRectContainer = svgContainer.append("g");
 svgContainer.selectAll("rect").on("click", function () {
 var littleRect = d3.select(this);
console.log(littleRect)

var bigRect = bigRectContainer.selectAll("rect")
                       .data(littleRect)
                       .enter()
                       .append("rect");

 });

请告诉我哪里错了...

最佳答案

我不完全确定您要用您发布的代码做什么,但我认为复制整个 SVG 节点很有趣。事实证明,使用 selection#html 很容易做到 - 这在 SVG 节点上不起作用,但它确实在其容器上起作用,因此很容易克隆整个节点:

function addAnother() {
    var content = d3.select(this.parentNode).html();
    var div = d3.select('body').append('div')
        .html(content);
    div.selectAll('svg').on('click', addAnother);
}

svg.on('click', addAnother);

参见 working fiddle here .请注意,这仅在 SVG 节点是其父节点的唯一子节点时才有效 - 否则,您可能需要以某种方式包装它。

关于javascript - 使用 d3.js 复制整个 svg 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19583354/

相关文章:

svg - TornadoFX 出现奇怪的 SVG 失真

javascript - 如何使用 d3.js 按单个单词分隔和包装 SVG 文本元素?

javascript - jQuery DateTimePicker 添加 5 分钟到当前日期

javascript - 如何在 if 语句中使用 'contains'?

javascript - 在 jquery UI 扩展中使用 Html.EditorFor 生成的 ID

html - SVG 在 firefox 上运行良好,但它在其他浏览器上的定位发生了变化

html - 用css绘制不规则形状(应该是响应式的)

javascript - D3 圆半径的弹性缓动过渡导致设置负半径

Javascript/D3 --- 标签的条件格式

javascript - 如何在 JavaScript 中围绕微时间创建时间范围的界限?