Javascript d3使用函数添加多个类

Javascript d3使用函数添加多个类,javascript,jquery,d3.js,Javascript,Jquery,D3.js,我的svg如下所示: <g class="user" title="Michael" rel="tooltip" transform = "rotate(-12.364052661705784)translate(360)" style="fill: #9467bd; "></g> 但它取代了原来的类。然后我试着 d3.selectAll('.user').classed('Michael',true); 它起作用了!但是现在我想用一个函数返回类名,比如 d3.sel

我的svg如下所示:

<g class="user" title="Michael" rel="tooltip" transform = "rotate(-12.364052661705784)translate(360)" style="fill: #9467bd; "></g>
但它取代了原来的类。然后我试着

d3.selectAll('.user').classed('Michael',true);
它起作用了!但是现在我想用一个函数返回类名,比如

d3.selectAll('.user').classed(function(){return this.attr('title');},true);
它不起作用。我该怎么做


非常感谢

您可以通过简单地用空格分隔元素的名称来为元素分配多个类:

d3.selectAll(".user").attr("class", "user Michael");
但是,似乎您真正需要的是为元素指定一个数据属性,对于这些元素,使用。所以你可以做:

d3.selectAll(".user").attr("data-name", function(d,i) { return "Michael #" + i; });
以及稍后获取用户的名称:

d3.select(".user").attr("data-name")

为什么要使用HTML5数据属性,复制标题属性中已有的数据?HTML5数据属性确实有用,但复制数据不是一件好事

无需重复数据即可轻松完成此操作,与您最初的想法非常接近

d3.selectAll('.user').each(
    function(){
        var elt = d3.select(this);
        elt.classed(elt.attr("title"), true);
    }
) 

如果您只想添加一个类,您可以跳出d3并使用类列表:

d3.selectAll('.user').node().classList.add("mynewclass");

可能无法在非常旧的浏览器中使用。

顺便说一句,您还可以使用
.classed('user Michael',true)
分配多个类:这似乎是一个更好的答案,因为它实际上允许您使用函数设置所请求的类。
d3.selectAll('.user').node().classList.add("mynewclass");