gpt4 book ai didi

svg - d3.js selectAll()。svg路径上的每个..未定义吗?

转载 作者:行者123 更新时间:2023-12-04 14:02:40 27 4
gpt4 key购买 nike

我正在以这种方式导入svg(从服务器用作静态内容)

d3.xml("http://localhost:3000/mysvg.svg", "image/svg+xml", function(xml) {
var importedNode = document.importNode(xml.documentElement, true);
var mySvg = d3.select("#somediv").node().appendChild(importedNode);
然后我尝试遍历所有svg路径并对它们进行处理
    d3.selectAll("#somediv svg path").each(function(d, i) {
console.log(this, d, i);
});
}
我得到的是这个问题
  • i是从1到路径数,这是正确的。
  • dundefined,而不是正确的svg路径元素。
  • this是svg路径元素,就像这样<path id="m021" fill="#00AAFF" d="M225.438,312.609c-0.665-1.084-1.062-1.691-2.368-1.963c-0.582-0.121-1.686-0.271-2.265-0.069 c-0.507,0.174-0.637,0.649-1.431,0.368c-0.934-0.33-0.665-1.272-0.71-2.104c-0.597-0.021-1.18,0-1.733,0.262 ...etc" ></path>

  • 我期望 d是真正的svg路径,为什么不是呢?
    编辑:
    对我想做的事情有一点了解可能会有所帮助。
    我有一个svg,其中包含我镇上每个区域的一条路径。我想在每个路径的中心制作一些饼图。我现在没有数据,它将用于饼图。我想在路径上添加一个鼠标悬停功能,并在每个路径上添加一个红色圆圈(在以后的步骤中将成为饼图)。
    做这个的最好方式是什么?

    最佳答案

    简化您的原始请求,假设您要在每个区域的中心添加一个圆圈。让我们假设这些区域是相对正方形的。请注意,如果您拥有地理数据而不是路径,这将更加简单。

    var svg = d3.select("#somediv svg");
    var districts = svg.selectAll("path");

    var district_centers = districts[0].map(function(d, i) {
    var bbox = this.getBBox();
    return [bbox.left + bbox.width/2, bbox.top + bbox.height/2];
    });

    svg
    .selectAll("circle")
    .data(district_centers)
    .enter()
    .append("circle")
    .attr("class", "district_circle")
    .attr("cx", function(d){ return d[0]})
    .attr("cy", function(d){ return d[1]})
    .attr("r", 10)
    .attr("fill", "red");

    关于svg - d3.js selectAll()。svg路径上的每个..未定义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15278380/

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