gpt4 book ai didi

javascript - 添加非嵌套元素

转载 作者:行者123 更新时间:2023-11-29 17:36:33 25 4
gpt4 key购买 nike

我正在用 D3 构建 svg。我想对路径元素使用裁剪,但在为裁剪路径附加 defs 部分时遇到问题。

这是我的代码:

function build_svg(div,width,height) {
var margin={left: 10, top: 20};
return div.append("svg")
.attr("width", "100%")
.attr("height", "100%")
.append("defs")
.append("clipPath")
.append("rect")
.attr("x", margin.left)
.attr("y", margin.top)
.attr("width", width)
.attr("height", height)
.insert("g","defs")
.attr("transform", "translate("+margin.left+","+margin.top+")");
}

我明白了:

<svg width="100%" height="100%">
<defs>
<clipPath>
<rect x="40" y="10" width="651" height="214">
<g transform="translate(40,10)">
.....
</g>
</rect>
</clipPath>
</defs>
</svg>

但我想要这个:

<svg width="100%" height="100%">
<defs>
<clipPath>
<rect x="40" y="10" width="651" height="214"></rect>
</clipPath>
</defs>
<g transform="translate(40,10)">
.......
</g>
</svg>

我的错误在哪里?

最佳答案

现在您只有一条链,因此您得到的结构是预期的结构。

所以,与其这样,不如打破你的链条。首先,命名 SVG 选择:

const svg = div.append("svg")
.attr("width", "100%")
.attr("height", "100%");

然后:

svg.append("defs")
.append("clipPath")
.append("rect")
.attr("x", margin.left)
.attr("y", margin.top)
.attr("width", width)
.attr("height", height);

svg.append("g", "defs")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");

请注意您要附加 组,而不是插入 组。

这是演示,运行它并检查 SVG:

function build_svg(div, width, height) {
var margin = {
left: 10,
top: 20
};

const svg = div.append("svg")
.attr("width", "100%")
.attr("height", "100%");

svg.append("defs")
.append("clipPath")
.append("rect")
.attr("x", margin.left)
.attr("y", margin.top)
.attr("width", width)
.attr("height", height);

svg.append("g", "defs")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
};

const div = d3.select("#myDiv");
build_svg(div, 200, 200)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<div id="myDiv"></div>

你会看到这个结构:

<svg width="100%" height="100%">
<defs>
<clipPath>
<rect x="10" y="20" width="200" height="200"></rect>
</clipPath>
</defs>
<g transform="translate(10,20)"></g>
</svg>

关于javascript - 添加非嵌套元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55888674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com