我有一个问题,我如何获得svg元素的类型,顺便说一句,我使用d3.js
我有......这样的var selectedElement = svg.select("." + STYLE.selected);
if (selectedElement instanceof SVGCircleElement){
alert("here circle");
selectedElement.style("fill", function(){return d3.rgb(d3.select(this).attr("fill"));});
}
if (selectedElement instanceof SVGPathElement){
alert("here path");
appendMarkerm(selectedElement,false);
}
但似乎没有用,有人可以帮帮忙,谢谢!
***finally, i made it work like this***
var selectedElement = svg.select("." + STYLE.selected);
if (selectedElement.node() instanceof SVGCircleElement){
selectedElement.style("fill", function(){return d3.rgb(d3.select(this).attr("fill"));});
}
if (selectedElement.node() instanceof SVGPathElement){
changeMarkerStyle(selectedElement,false);
}
cauz selection.node()将返回选择的第一个元素
答案 0 :(得分:5)
只需使用tagName
属性:
svg.select("." + STYLE.selected)
.call( function(){
switch( selectedElement.tagName.toLowerCase() ) {
case 'circle':
alert("here circle");
this.style("fill", function(){return d3.rgb(d3.select(this).attr("fill"));});
break;
case 'path':
alert("here path");
appendMarkerm( this, false );
break;
}
});
修改强>
d3js'select()
不返回元素本身,而是返回d3js包装器(非常类似于jQuery,例如)。所以最简单的方法是使用call()
方法将函数应用于所有匹配(仅select()
只有一个)。