Svg 如何将D3 selectAll与多个类名一起使用
我正在尝试为SVG元素使用多个类名,以便(希望)可以使用selectAll和类名的“parts”来选择其中的一个子集。不幸的是,我试过的东西都不管用,我也没有在网上找到一个例子。下面的代码演示了我试图用一个简单的四个圆的例子来做什么。两个圆的类名为“myc101”,两个圆的类名为“myc202”。selectAll(“.mYc”)给出所有四个圆。如果我只想要类名为“myc101”的圆怎么办?这能做到吗?怎么用?谢谢无限倍Svg 如何将D3 selectAll与多个类名一起使用,svg,d3.js,selectall,Svg,D3.js,Selectall,我正在尝试为SVG元素使用多个类名,以便(希望)可以使用selectAll和类名的“parts”来选择其中的一个子集。不幸的是,我试过的东西都不管用,我也没有在网上找到一个例子。下面的代码演示了我试图用一个简单的四个圆的例子来做什么。两个圆的类名为“myc101”,两个圆的类名为“myc202”。selectAll(“.mYc”)给出所有四个圆。如果我只想要类名为“myc101”的圆怎么办?这能做到吗?怎么用?谢谢无限倍 <!DOCTYPE html> <meta charse
<!DOCTYPE html>
<meta charset="utf-8">
<body>
<div id="my_div"></div>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script>
var m_div = d3.select("#my_div");
var m_svg = m_div.append("svg");
var g = m_svg.append("g");
g.append("circle")
.attr("class", "mYc 101")
.attr("cx", 100)
.attr("cy", 100)
.attr("r", 50)
.attr("style", "stroke: green; stroke-width: 8; fill: #000000");
g.append("circle")
.attr("class", "mYc 101")
.attr("cx", 300)
.attr("cy", 100)
.attr("r", 50)
.attr("style", "stroke: green; stroke-width: 8; fill: #000000");
g.append("circle")
.attr("class", "mYc 202")
.attr("cx", 100)
.attr("cy", 300)
.attr("r", 50)
.attr("style", "stroke: blue; stroke-width: 8; fill: #000000");
g.append("circle")
.attr("class", "mYc 202")
.attr("cx", 300)
.attr("cy", 300)
.attr("r", 50)
.attr("style", "stroke: blue; stroke-width: 8; fill: #000000");
// This selects all four circles
var list = d3.selectAll(".mYc");
// But if I want to select only class "mYc 101", none of these work.
// In fact they all give an error.
// var list1 = d3.selectAll(".mYc 101");
// var list1 = d3.selectAll(".mYc .101");
// var list1 = d3.selectAll(".mYc.101");
// var list1 = d3.selectAll(".mYc,.101");
// var list1 = d3.selectAll(".101");
</script>
</body>
var m#u div=d3.选择(“我的div”);
var m_svg=m_div.append(“svg”);
var g=m_svg.append(“g”);
g、 附加(“圆圈”)
.attr(“类别”、“mYc 101”)
.attr(“cx”,100)
.attr(“cy”,100)
.attr(“r”,50)
.attr(“样式”,“笔划:绿色;笔划宽度:8;填充:#000000”);
g、 附加(“圆圈”)
.attr(“类别”、“mYc 101”)
.attr(“cx”,300)
.attr(“cy”,100)
.attr(“r”,50)
.attr(“样式”,“笔划:绿色;笔划宽度:8;填充:#000000”);
g、 附加(“圆圈”)
.attr(“类别”,“mYc 202”)
.attr(“cx”,100)
.attr(“cy”,300)
.attr(“r”,50)
.attr(“样式”,“笔划:蓝色;笔划宽度:8;填充:#000000”);
g、 附加(“圆圈”)
.attr(“类别”,“mYc 202”)
.attr(“cx”,300)
.attr(“cy”,300)
.attr(“r”,50)
.attr(“样式”,“笔划:蓝色;笔划宽度:8;填充:#000000”);
//这将选择所有四个圆
var list=d3。选择全部(“.mYc”);
//但是,如果我只想选择类“myc101”,这些都不起作用。
//事实上,他们都给出了一个错误。
//var list1=d3.selectAll(“.mYc 101”);
//var list1=d3.selectAll(“.mYc.101”);
//var list1=d3.selectAll(“.mYc.101”);
//var list1=d3.selectAll(“.mYc,.101”);
//var list1=d3.选择全部(“.101”);
最常用的D3方法是使用过滤器
方法链接选择器:
var list1 = d3.selectAll(".mYc").filter(".101");
但这不起作用,因为类名不能以数字开头。因此,您必须重命名为类似“a101”的名称,然后才能执行此操作
var list1 = d3.selectAll(".mYc").filter(".a101");
请参阅。我发现的另一种方法是同时选择两个类作为单个字符串,例如:
var list1 = d3.selectAll(".mYc.a101")
如果你在两个类之间加一个空格,或者在两个类之间加一个逗号(这会选择有两个类的对象),这就行不通了。非常感谢Lars!!关键是类名不能以数字开头。BillLars的答案更完整,但这是帮助我理解的答案。此外,您可以使用
var list1=d3.selectAll(“circle.mYc.a101”)