4

是否document.getElementById支持使用 Mozilla 中的 DOMParser 方法从 XML 字符串解析的 DOM 方法?我正在制作一个 Mozilla 扩展,它读取 XML 文件并使用 DOM Parser 将 XML 转换为 DOM 元素并尝试通过 Id 获取元素。getElementsByTagName 方法有效,但 getElementById 无效。它总是返回 null。

function (xmlString) {
    var parser = new DOMParser();
    var doc = parser.parseFromString(xmlString, "text/xml"); 
    var aNodes = doc.getElementsByTagName("nodeTag");
    for(var i=0; i<aNodes.length; ++i) {
        var id = aNodes[i].getAttribute('id');
        var resultNode = doc.getElementById(id);
        alert(id);
        alert(resultNode);
    }
}

我试过上面的代码。alert(id) 返回正确的 id,而 alert(resultNode) 每次都返回 null。

4

2 回答 2

8

不,document.getElementById通常不适用于任意 XML 文档。

在最近的浏览器(例如 Firefox 3.5 及更高版本)中,您可以document.querySelector改用:

var resultNode = doc.querySelector("[id=" + id + "]");
于 2010-09-08T12:06:00.257 回答
2

如果您想要一个真正使 getElementById() 方法可用的解决方案(您应该这样做,它更快,更通用)并且您可以访问 DTD,添加以下行:

<!ATTLIST client id ID #IMPLIED >

如果您还没有使用 DTD,只需在<?xml version= \"1.0\"?>语句之后直接将其添加到 xml 文档中:

<!DOCTYPE clients [ 
   <!ATTLIST client id ID #IMPLIED > 
]>

在这个例子中,“clients”是我的 xml 文件的根,“client”是我想附加 id 的元素。您可以为其他想要将 id 添加到其他类型元素的元素添加多个“ATTLIST”语句。

我在 safari、chrome 和 firefox 中对此进行了测试。完美运行。

于 2013-02-05T00:15:26.703 回答