为什么这个Javascript DOM代码只能运行FF,而不是IE?

时间:2009-09-23 06:52:14

标签: javascript dom

//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 Parser中是否提供“children”属性?

2 个答案:

答案 0 :(得分:7)

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

您应该使用childNodes集合。但请注意,在Firefox和其他浏览器中 - 以及IIRC,在IE中非常特殊的情况下 - 此集合还将包含仅包含空格的文本节点,例如原始XML文件中的换行符。因此,您需要检查nodeType属性:如果它的值为1,则它是一个元素,并且将具有tagName等属性。

此外,由于MSXML实现DOM Level 1,而Firefox实现DOM Level 3,您将无法使用第3级中引入的textContent属性。相反,您将必须迭代childNodes = {3}的nodeType并连接它们的nodeValue属性,然后可能需要修剪任何前导或尾随空格。或者,如果您知道那里只有textNodes,请首先调用该元素的normalize方法,以确保它只有一个文本节点子节点。

没有人说这些东西应该很简单: - (

答案 1 :(得分:1)

children是IE6中的一个对象。也许IE的第一个孩子是文本节点是不一致的,而在其他浏览器中,第一个孩子是DOM元素节点?通常,您使用.childNodes.childNodes.length并在循环中检查.nodeType==1以贯穿孩子。