2012-05-29 36 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; 
}