d3.select(#elementId)找不到元素

时间:2016-06-23 14:17:00

标签: javascript d3.js

我对javascript的经验不多。

这是我的js代码:

 function () {


            alert("start");
            var svg1 = document.createElementNS("http://www.w3.org/2000/svg", "svg");

            svg1.setAttributeNS(null,"id","fillgauge1");
            svg1.setAttributeNS(null,"width","97%");
            svg1.setAttributeNS(null,"height","250");
            svg1.setAttributeNS(null,"onclick","gauge1.update(NewValue());");
            document.body.appendChild(svg1);
            var gauge1 = loadLiquidFillGauge("fillgauge1", 55);
 //other code
  }

 function loadLiquidFillGauge(elementId, value, config) {
     alert("start loadLiquidFillGauge OK");
     if(config == null) config = liquidFillGaugeDefaultSettings();
     alert(elementId + "<-elementID| value->" + value + "| config--> " + config );
     var gauge = d3.select("#" + elementId);

     //other code
 }

代码在d3.select调用时停止执行。

您是否知道为什么选择方法找不到elementid fillgauge1?

修改

我更新了代码,现在id为fillgauge1的元素svg1 isnt为null。但是select方法会停止执行..

1 个答案:

答案 0 :(得分:0)

您需要将SVG元素附加到文档中。您的SVG已创建,但它不存在于页面上,因此d3.select将无效。在调用loadLiquidFillGauge之前添加以下行。

document.body.appendChild(svg1)

这可能更清楚:

 var svg1 = document.createElementNS("http://www.w3.org/2000/svg", "svg");
 svg1.setAttributeNS("http://www.w3.org/2000/svg","id","fillgauge1");
 svg1.setAttributeNS("http://www.w3.org/2000/svg","width","97%");
 svg1.setAttributeNS("http://www.w3.org/2000/svg","height","250");
 svg1.setAttributeNS("http://www.w3.org/2000/svg","onclick","gauge1.update(NewValue());");

 document.body.appendChild(svg1);

 var gauge1 = loadLiquidFillGauge("fillgauge1", 55);