x [i] .parentElement.NodeName适用于除资源管理器之外的所有内容。为什么?

时间:2017-08-17 15:52:11

标签: javascript xml xml-parsing

我正在解析来自XMLHttpRequest的XML文件:

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {      
    loadItems(this);
  }
};
xhttp.open("GET", "articles.xml", true);
xhttp.send();

function loadItems(xml) {
  var xmlDoc = xml.responseXML;
  var items = xmlDoc.getElementsByTagName("item");
  for(var i = 0; i < items.length; i++){
    //Next line is where the script crashes...
    var newCategory = articles[i].parentElement.nodeName;
    alert(newCategory);
  }
}

我已经通过以下方式追踪我的错误:

var newCategory = articles[i].parentElement.nodeName;

我正在使用的XML结构:

<head>
   <category>
       <item>
          <title>
             foo
          </title>
          <contents>
             bar
          </contents>
        </item>
   </category>
   <newcategory>
       <item>
          <title>
             left
          </title>
          <contents>
             right
          </contents>
        </item>
   </newcategory>
</head>     

这似乎适用于除Internet Explorer之外的所有其他浏览器,其中脚本在此行静默崩溃。在其他浏览器中,newCategory将有一个字符串&#34; category&#34;或&#34; newcategory&#34;取决于每个项目的父节点。

我看过Windows&#39; docs,他们说支持parentElement和nodeName访问器,为什么会让IE中的脚本崩溃?

2 个答案:

答案 0 :(得分:1)

在对Internet Explorer文档进行一些研究之后,我发现有一个parentNode访问器可以在Firefox / Chrome / Opera和Explorer中使用。

var newCategory = articles[i].parentNode.nodeName;

答案 1 :(得分:0)

我有类似的问题。尝试使用.nodeValue代替.nodeName

var newCategory = articles[i].parentElement.nodeValue;