如何获取svg元素类型

时间:2013-08-30 09:30:25

标签: javascript svg d3.js

我有一个问题,我如何获得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()将返回选择的第一个元素

1 个答案:

答案 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()只有一个)。