2012-05-29 30 views
0

我有一个问题与IE9用下面的代码:的Javascript object.textContent ==未定义在IE 9只

var XMLDocument = data; 
        var erreurs = new Array(); 

        var test = data.lastChild.lastChild.childNodes; 

        for(var i=0; i<test.length; i++) 
        { 
         //var testx = test[i].textContent; 
         //alert("Test"+i+" = "+testx); 
         var testx = getText(test[i]); 
         alert(testx); 
         erreurs[i] = testx; 
        } 

function getText(el) { 
    return el.textContent || el.innerText || el.nodeValue || ''; 
} 

在FF,Opera和Safari,该代码工作正常。 在IE中,它给了我:
TEST0 =未定义
测试1 =未定义

我的XML:

<error> 
    <missing>1</missing> 
    <missing>2</missing> 
    <missing>a</missing> 
</error> 

我只是想返回节点 “失踪” 的值。

非常感谢您的帮助。

+0

你的代码'返回el.textContent || el.innerText || el.nodeValue || '';那么问题是什么? – Esailija

+1

http://jsfiddle.net/BdCgL/1/工作得很好,我只编辑了ie7和ie8的'nodeValue'部分,但是甚至在他们没有提醒'未定义'之前,ie9没有被编辑好。 – Esailija

+0

经过断点调试后,看起来IE的解释器XML返回与FF不同的文件。我在别处找到了缺失的节点。像这样:data.lastchild.lastchild.lastchild.lastchild.childnode.text 所以,我必须搜索逐个节点名称而不是探索树... – Zorkzyd

回答

3

我发现本网站上的解决方案: http://www.chezneg.fr/leblog/chezneg-leblog.php?id_art=125

貌似,IE和FF解释不读相同的方式XML文档。
对于FF,错误标记位置为:data.lastChild.lastChild.childNodes
对于IE,错误标记位置为:data.lastChild.lastChild.lastChild.lastChild.childNodes
(DIXIT调试器)

因此,通过以下代码找到错误标记是个好主意:data.getElementsByTagName('error');

非常感谢Esailija的帮助!

3

我已经通过这个代码在IE9固定接近问题:

function getText(el) { 
    return el.textContent || el.text; 
}