为什么此Javascript DOM代码只工作FF,而不是IE浏览器?

问题描述 投票:2回答:2
//create an instance of the XML parser
if (window.ActiveXObject)
{ 
    //Checking if the browser is IE
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async="false"; //make sure doc is fully loaded
    xmlDoc.load(strPath) //load the file in the parser
    if (xmlDoc.parseError.errorCode != 0) 
    {
        alert("Error #: " + xmlDoc.parseError.errorCode;        
    }        
}

//for mozilla based browsers
else if (document.implementation && document.implementation.createDocument)       
{
    xmlDoc= document.implementation.createDocument("","doc",null); 
    xmlDoc.async=false; //make sure doc is fully loaded
    loaded = xmlDoc.load(strPath);
    if(!loaded)
    {
       alert("Error in XML File");
    }            
}

//Parse the XML
var root = xmlDoc.documentElement;
level1Nodes = root.children;
for(var index1 = 0; index1 < level1Nodes.length; index1++)
{
    //Extract the markup content from XML
    var level1Node = level1Nodes[index1];
    var strName = level1Node.children[0].textContent;
    var strHeader1 = level1Node.children[1].tagName;
    var strHeader1Content = level1Node.children[1].textContent;
}

在IE DOM解析器提供的“孩子”的财产?

javascript dom
2个回答
7
投票

在IE中,一个XML文档不实现相同的文档对象模型为HTML文档;特别是,XML Node对象没有children属性,它是非标准。

您应该使用childNodes收集来代替。但是要知道,在Firefox和其他浏览器 - 和,IIRC,下在IE中非常特殊的情况 - 这个系列将包括只包含空白的文本节点,如原XML文件中的换行符。所以,你需要检查nodeType性质:如果它的值为1,它是一个元素,也就有了诸如tagName性能。

此外,由于MSXML实现DOM Level 1,而火狐实现DOM Level 3,你将无法使用textContent属性,这是在3级。取而代之的介绍,你将不得不遍历childNodes === 3 nodeType并连接它们的nodeValue属性,可能会再想要修剪任何开头或结尾空白。另外,如果你知道会有永远只能是textNodes在里面,首先调用元素的normalize方法,以确保它只有一个文本子节点。

从来没有人说这东西应该是很容易:-(


1
投票

children是在IE6一个对象。也许有一个在IE浏览器的第一个孩子不一致是一个文本节点,而在其他浏览器的第一个孩子是一个DOM元素节点?通常你会使用.childNodes.childNodes.length和环型检查.nodeType==1通过孩子来运行。

© www.soinside.com 2019 - 2024. All rights reserved.