【问题标题】:getElementById() is not working after modifying the SVG Document修改 SVG 文档后 getElementById() 不起作用
【发布时间】:2012-02-10 16:42:49
【问题描述】:

我有一个 SVG 文档;说如下:

<svg>
   <g ...>
      <rect id="perm1" ../>
      <rect id="temp1" ../>
</svg>

在运行时,我正在使用 java 脚本函数将第二个“rect”的 id 从“temp1”更改为“calc_id1”(见下文);但在修改它之后,我立即调用另一个函数,在该函数中我试图使用 getElementById() 检索矩形元素,新 id 为“calc_id1”;但它返回null。我不确定,这里出了什么问题,但我可以确认 rect 元素已使用新 ID 进行了更新。任何线索或答案都会对我有很大帮助。

请注意,我使用的是 IE9。

changeID( xmlDoc, "//g[@id='temp1']", "calc_id1");

function changeID( xmlDoc, xPath, newIdValue ) {
    var node = xmlDoc.selectSingleNode(xPath);
    if (node!=null){
            var oAttr = node.attributes.getNamedItem( "id");
            if (oAttr!=null){
                 oAttr.text = newIdValue;
            }
            return node;
    }
    else {
            return null;
    }
}

【问题讨论】:

  • 请添加设置id的javascript代码sn-p,以确认该位没有问题。
  • 添加了所需的java脚本函数!
  • 我认为应该有一个拼写错误。应该是 changeID(xmlDoc, "//rect[@id='temp1']", "calc_id1");
  • 这是问题中的拼写错误,在实际代码中,我确实将其命名为“//rect[id]='temp1']”。我可以使用 getElementsByTagName() 获取所有元素并通过“id”属性过滤列表!可能是 IE9 中的错误!

标签: javascript svg internet-explorer-9


【解决方案1】:

getElementById() 似乎没有找到新添加的元素,因为它们未被识别为 svg 元素;他们缺少其中的 svg 命名空间。一旦我添加了命名空间,它就起作用了。请参阅answer 了解更多详情。

【讨论】:

    猜你喜欢
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 2020-04-20
    • 2013-12-02
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    相关资源
    最近更新 更多