6

我有一个问题,我怎样才能得到 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() 将返回选择的第一个元素

4

1 回答 1

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()此的情况下只是一个)。

于 2013-08-30T09:39:11.837 回答