d3.js. Как добавить documentFragment в SVG?

Смотрите мой пример на jsfiddle. Один красный rect существует как статическая уценка. Второй зеленый rect добавляется с помощью метода добавления. Где синий rect? Вы можете увидеть с любым инспектором документов, что синий rect уже вставлен в svg элемент, но это не видно. Зачем? Я пытаюсь вставить большое количество прямоугольников в SVG, используя documentFragment но они все не видны...

2 ответа

Решение

Кажется, вы должны помочь d3, сказав, что rect это svg rect, а не какой-то мифический html rect элемент. Например

var svg = d3.select("svg");
svg.append("rect")
    .attr("width", 50)
    .attr("height", 50)
    .attr("x", 50)
    .attr("y", 0)
    .attr("fill", "green")
var documentFragment = document.createDocumentFragment();
d3.select(documentFragment).append("svg:rect")
    .attr("width", 50)
    .attr("height", 50)
    .attr("x", 100)
    .attr("y", 0)
    .attr("fill", "blue")
console.log(documentFragment);
svg.node().appendChild(documentFragment);

Не уверен, но это может быть ошибкой в ​​d3.

С помощью Роберта Лонгсона я сделал рабочий пример на JSFiddle:

Другие вопросы по тегам