在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。
不,document.getElementById
通常不会处理任意XML文档。
在最近的浏览器中(例如Firefox 3.5及更高版本),您可以使用document.querySelector
代替:
var resultNode = doc.querySelector("[id=" + id + "]");
如果你想要一个实际上使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中测试了这个。工作得很好。