2010-09-08 62 views
3

在使用Mozilla中的DOMParser方法从XML字符串分析的DOM上支持document.getElementById方法? 我正在制作一个mozilla扩展,它读取xmlfile并使用DOM解析器将xml转换为DOM元素,并尝试通过Id获取元素。 getElementsByTagName方法工作,但不是getElementById。它总是返回null。用于XML文档的getElementById,Mozilla扩展

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。

回答

8

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

在最新的浏览器(如Firefox 3.5及更高版本),你可以用document.querySelector代替:

var resultNode = doc.querySelector("[id=" + id + "]"); 
+0

谢谢Tim。正是我在找什么。 – Sharad 2010-09-09 04:20:33

+0

是的,但当然会返回名称为“id”的属性,而不是类型为ID的属性。 – 2011-09-08 14:38:59

+0

@迈克尔:确实,但我怀疑这对于OP来说可能足够好。另外,'DOMParser'是否读取DTD? – 2011-09-08 15:32:21

2

如果你想一个解决方案,实际上使的getElementById()方法中使用(你应该,这是非常非常快,更灵活的),你可以访问DTD以下行添加到它:如果你没有使用DTD但

<!ATTLIST client id ID #IMPLIED > 

,只是<?xml version= \"1.0\"?>后直接添加此XML文档声明:

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

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

我在safari,chrome和firefox中测试了这个。完美的作品。

+0

getElementById()也不适用于我。迈克尔凯解释了为什么。这为我修好了。谢谢,@VoltzRoad! – 2013-08-22 05:34:11