使用 .each 遍历路径 D3
Loop through paths D3 with .each
我正在尝试在 D3 中制作我的第一张地图。地图显示正常,但我现在想遍历附加到 SVG 的每条路径。这是我正在处理的代码:
var path = d3.geo.path()
.projection(projection);
//Create SVG element
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
//Load in GeoJSON data
d3.json("/data/friesland.json", function (json) {
//Bind data and create one path per GeoJSON feature
svg.selectAll("path")
.data(json.features)
.enter()
.append("path")
.attr("d", path)
.attr('fill', 'rgba(29,91,85,1)')
.attr('stroke', 'white')
.attr('stroke-width', 1);
});
svg.selectAll('path').each(function (d, i) { console.log('test'); });
似乎没有绑定到 svg 的路径,我该如何更改它?
谢谢!
d3.json
执行 asychronously (see docs)。尝试在传递给 d3.json
的函数中 selecting <path>
s,像这样:
d3.json("/data/friesland.json", function (json) {
//Bind data and create one path per GeoJSON feature
svg.selectAll("path")
.data(json.features)
.enter()
.append("path")
.attr("d", path)
.attr('fill', 'rgba(29,91,85,1)')
.attr('stroke', 'white')
.attr('stroke-width', 1);
svg.selectAll('path').each(function (d, i) { console.log('test'); });
});
现在您只会在填充 SVG 后 select <path>
秒。
正如 mdml 所建议的那样,您想将 selectAll 放在 json 加载的回调中 - 否则它会在绑定发生之前发生。
var path = d3.geo.path()
.projection(projection);
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
d3.json("/data/friesland.json", function (json) {
svg.selectAll("path")
.data(json.features)
.enter()
.append("path")
.attr("d", path)
.attr('fill', 'rgba(29,91,85,1)')
.attr('stroke', 'white')
.attr('stroke-width', 1);
svg.selectAll('path').each(function (d, i) { console.log('test'); });
});
我正在尝试在 D3 中制作我的第一张地图。地图显示正常,但我现在想遍历附加到 SVG 的每条路径。这是我正在处理的代码:
var path = d3.geo.path()
.projection(projection);
//Create SVG element
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
//Load in GeoJSON data
d3.json("/data/friesland.json", function (json) {
//Bind data and create one path per GeoJSON feature
svg.selectAll("path")
.data(json.features)
.enter()
.append("path")
.attr("d", path)
.attr('fill', 'rgba(29,91,85,1)')
.attr('stroke', 'white')
.attr('stroke-width', 1);
});
svg.selectAll('path').each(function (d, i) { console.log('test'); });
似乎没有绑定到 svg 的路径,我该如何更改它? 谢谢!
d3.json
执行 asychronously (see docs)。尝试在传递给 d3.json
的函数中 selecting <path>
s,像这样:
d3.json("/data/friesland.json", function (json) {
//Bind data and create one path per GeoJSON feature
svg.selectAll("path")
.data(json.features)
.enter()
.append("path")
.attr("d", path)
.attr('fill', 'rgba(29,91,85,1)')
.attr('stroke', 'white')
.attr('stroke-width', 1);
svg.selectAll('path').each(function (d, i) { console.log('test'); });
});
现在您只会在填充 SVG 后 select <path>
秒。
正如 mdml 所建议的那样,您想将 selectAll 放在 json 加载的回调中 - 否则它会在绑定发生之前发生。
var path = d3.geo.path()
.projection(projection);
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
d3.json("/data/friesland.json", function (json) {
svg.selectAll("path")
.data(json.features)
.enter()
.append("path")
.attr("d", path)
.attr('fill', 'rgba(29,91,85,1)')
.attr('stroke', 'white')
.attr('stroke-width', 1);
svg.selectAll('path').each(function (d, i) { console.log('test'); });
});