d3.js.如何将documentFragment追加到SVG中?

6vl6ewon  于 2023-04-30  发布在  其他
关注(0)|答案(2)|浏览(156)

请参见我在jsfiddle上的示例。一个红色rect作为静态markdown存在。使用append方法附加第二个绿色rect。蓝色rect在哪里?您可以使用任何文档检查器看到蓝色rect已经插入到svg元素中,但它不可见。为什么?我尝试使用documentFragment将大量矩形插入SVG中,但它们都不可见。..

5vf7fwbs

5vf7fwbs1#

看起来你必须帮助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中的一个bug。

lyfkaqu1

lyfkaqu12#

在Robert Longson的帮助下,我做了一个工作示例on JSFiddle

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")
svg.node().appendChild(documentFragment);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.min.js"></script>
<svg width="400px" height="400px">
    <rect width="50" height="50" x="0" y="0" fill="red"></rect>
</svg>

相关问题