Javascript 如何在d3中动态选择一个类?
我正在使用以下代码执行选择功能Javascript 如何在d3中动态选择一个类?,javascript,d3.js,Javascript,D3.js,我正在使用以下代码执行选择功能 quadrants = ["a", "b", "c", "d"]; for (var i in quadrants) { svgContainer.append("g").attr("class", quadrants[i]); var group = d3.select(function () {return "." + quadrants[i]}); group.append("polygon"); ..... } 这不起
quadrants = ["a", "b", "c", "d"];
for (var i in quadrants)
{
svgContainer.append("g").attr("class", quadrants[i]);
var group = d3.select(function () {return "." + quadrants[i]});
group.append("polygon");
.....
}
这不起作用,因为组的值是“function(){return”。+quadrants[i]”。
我如何修复它,以便组选择“.a”、“.b”等等?您忘记关闭
{
此外,您不需要使用函数,以下代码可以工作:
quadrants = ["a", "b", "c", "d"];
for (var i in quadrants)
{
//svgContainer.append("g").attr("class", quadrants[i]);
var group = d3.selectAll('.'+quadrants[i]);
group.text(function(){return i});
}
事实上,使用函数是没有意义的。函数的作用是从变量中动态计算选择器。但是,当使用d3时,没有传递给函数的任何内容。选择或d3。选择全部
jsidle:在d3中使用函数没有意义。选择或d3.selectAll
语句,因为您还没有任何元素可以用作函数d
和i
值的源。如果select语句是a,则只能使用函数,在这种情况下,父元素的函数中使用数据和索引值
然而,通过使用d3,还有一种更优雅的方式来完成您想要做的事情:
象限=[“a”、“b”、“c”、“d”];
var group=svgContainer.selectAll(“g”)//定义元素的选择
.data(象限);//声明您需要一个
//对于象限中的每个值
group.enter()//获取数据对象的占位符选择
//还没有匹配的元素
.append('g')//为每个占位符创建元素
.attr(“类”,函数(d,i){
//使类成为数据的函数
//(这是象限数组中的值)
返回d;
});
group.append(“polygon”);//向*每个*元素添加一个多边形
这是一个输入错误还是你没有关闭{
?对不起,这是一个输入错误。修复了。或者var group=d3.select('..+quadrants[i]);
非常感谢你……解决了这个问题。你能告诉我为什么我不能在select()中使用函数吗。我不熟悉JS和D3,因此这可能是一个noob问题。select
也会起作用,但它只会选择与选择器对应的所有项中的第一项。这不是您通常希望使用的类。例如:P.S.您可能也会发现它很有用。
quadrants = ["a", "b", "c", "d"];
var group = svgContainer.selectAll("g") //define a selection of <g> elements
.data( quadrants ); //declare that you want one <g>
//for each value in quadrants
group.enter() //get the placeholder selection for the data objects
//that don't have matching elements yet
.append('g') //create the elements for each placeholder
.attr("class", function(d,i) {
//make the class a function of the data
//(which is the value from the quadrants array)
return d;
});
group.append("polygon"); //add a polygon to *each* <g> element