getElementsByTagName在Chrome中返回空列表(但不在firefox中)

时间:2012-12-04 14:09:18

标签: javascript

我有js函数,它试图设置XMLDoc对象并设置一个全局参数(modelingDiagram)。

在尝试按标记名称获取元素时,它总是返回空列表(但不是在firefox中)。 在调试过程中,我发现它正在为我在监视区域尝试的任何标记返回空列表 -     xmlDoc.getElementsByTagName( '进程');或xmlDoc.getElementsByTagName(“desc”);

以下是js功能。评论区域表示我获得例外的地方。

function setXmlDoc(text)
{
if (window.ActiveXObject){
              var doc=new ActiveXObject('Microsoft.XMLDOM');
              doc.async='false';
              doc.loadXML(text);
} else {
              var parser=new DOMParser();
              var doc=parser.parseFromString(text,'text/xml');
}

xmlDoc = doc;
modelingDiagram = xmlDoc.getElementsByTagName('Processes')[0].getElementsByTagName('ModelingDiagram');
//Uncaught TypeError: Cannot call method 'getElementsByTagName' of undefined
}

text变量包含字符串格式的xml-

<?xml version="1.0" encoding="utf-8"?>
<Processes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="">
  <Process>
    <desc value="Z45 Accounting">Z45 Accounting</desc>
    <height value="541">541</height>
    <width value="411">411</width>
    <xval value="50">50</xval>
    <yval value="50">50</yval>
    <Flowelements>
   ....
   ....
   ....

我无法弄清楚Chrome在这里有什么期望获得正确的列表?

2 个答案:

答案 0 :(得分:0)

根据W3C DOM 3核心规范,getElementByTagName()返回NodeList以使“核心”规范独立于“html”规范,Gecko / Firefox目前返回NodeList(错误162927),但从Gecko / Firefox 19开始,它将返回HTMLCollection(错误799464)。

但是DOM4草案说getElementByTagName()应该返回HTMLCollection。

Internet Explorer,WebKit&amp; Opera目前返回HTMLCollection。 尝试使用namedItem方法,这将使其类似于HTMLCollection。

答案 1 :(得分:0)

深入研究问题之后,我开始知道这个xml字符串在第0个索引处有一些特殊的字符(看不见)。我期待'&lt;'在执行警报(text.charAt(0))但它在弹出窗口中没有显示任何字符。这让我意识到stmt xmlDoc.loadXML(text)总是返回false。

text = text.substr(1, text.length);

解决了这个问题。