使用Mozilla中的DOMParser方法从XML字符串解析DOM是否支持document.getElementById
方法?
我正在制作一个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。
答案 0 :(得分:8)
不,document.getElementById
通常不会处理任意XML文档。
在最近的浏览器中(例如Firefox 3.5及更高版本),您可以改为使用document.querySelector
:
var resultNode = doc.querySelector("[id=" + id + "]");
答案 1 :(得分: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中对此进行了测试。效果很好。