getElementById在有效div上失败了吗?

时间:2012-01-10 15:26:14

标签: javascript dom getelementbyid

困惑......执行下面的10行代码后,elem1被定义,elem2为空。但是,除了变量名称之外,2个代码块是相同的,并且正在创建一个' svg'节点(工作),另一个是创建一个' div'节点(失败):

   var chart_name = "chart_" + ui.panel.id;
   var chart_elem = document.createElementNS(svgNS, "svg");
   chart_elem.setAttributeNS(null, "id", chart_name);
   top.appendChild(chart_elem);
   var elem1 = document.getElementById(chart_name);

   var pldiv_name = "plist_" + ui.panel.id;
   var pldiv_elem = document.createElementNS(svgNS, "div");
   pldiv_elem.setAttributeNS(null, "id", pldiv_name);
   top.appendChild(pldiv_elem);
   var elem2 = document.getElementById(pldiv_name);

如果我在最后一行代码上设置断点,在调用getElementById之前,Firebug会向我显示这个HTML视图:

<div id="tabs-2" class="etc...">
<svg id="chart_tabs-2">
<div id="plist_tabs-2">
</div>

在DOM视图中,Firebug使用localName elem1和ID svg显示chart_tabs-2。它的下一个兄弟是一个div,其标识为plist_tabs-2,是pldiv_name的值。尽管如此,getElementById(pldiv_name)失败了。

任何想法为什么?感谢。

2 个答案:

答案 0 :(得分:3)

您可以尝试在SVG名称空间中创建DIV 而不是吗?

var pldiv_elem = document.createElement("div");

答案 1 :(得分:0)

您何时调用JavaScript?如果它是&#34;内联&#34;但是在你的DIV之前,代码将在HTML代码被解析并且DIV存在之前执行。您需要将代码移动到DIV之后,或者在窗口加载(或文档就绪)事件上执行它。