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