2011-12-23 69 views
1

什麼改變(不包括jQuery的)這些HTML/JavaScript和IE9最好的工作方式,的JavaScript加載XML的文檔與IE9

<html> 
    <body> 
     <div id="xmls"> 
      <xml id="myXml"> 
       <bookstore> 
        <book category="COOKING"> 
         <title lang="en">Everyday Italian</title> 
         <author>Giada De Laurentiis</author> 
         <year>2005</year> 
         <price>30.00</price> 
        </book> 
       </bookstore> 
      </xml> 
     </div> 
     <!-- ...more html --> 
    </body> 
</html> 

以及閱讀劇本這個網站部分

function readBooks() { 
    var doc = null; 
    try { 
     doc = document.getElementById("myXml").XMLDocument.documentElement.childNodes.length; 
     alert('msg =' + doc); 
     //i need child nodes to iterate and show values, 
    } catch (ex) { 
     alert("problems to load xml" + doc); 
     throw ex; 
    } 
} 

這些與ie6,7,8正常工作。

但與ie9不是。

XmlDocument的屬性未定義,

感謝,

+0

對不起看上去都不錯,我的XML是writted到html文檔 – jrey 2011-12-23 16:41:42

+2

我想你忘了提到具體問題是什麼。你在IE9上試過了嗎?它不工作?怎麼樣?任何錯誤?任何意外的結果? – 2011-12-23 16:48:08

回答

1

以下在現代瀏覽器

function readBooks() { 
     var doc; 
     try { 
      doc = document.getElementById("myXml") 
      alert('msg =' + doc.childNodes.length); 
      for (var i = 0; i < doc.childNodes.length; i++) { 
      if(doc.childNodes[i].tagName && doc.childNodes[i].tagName.toUpperCase() == "BOOKSTORE") { 

       for (var j = 0; j < doc.childNodes[i].childNodes.length; j++) { 
        if (doc.childNodes[i].childNodes[j].tagName && doc.childNodes[i].childNodes[j].tagName.toUpperCase() == "BOOK") { 
         var book = doc.childNodes[i].childNodes[j]; 
         alert(book.getAttribute("category")); 
         alert(getNodeValue(book.getElementsByTagName("title")[0])); 
         alert(getNodeValue(book.getElementsByTagName("author")[0])); 
         alert(getNodeValue(book.getElementsByTagName("year")[0])); 
         alert(getNodeValue(book.getElementsByTagName("price")[0])); 
        } 
       } 
      } 
      } 
     } catch (ex) { 
      alert("problems to load xml" + doc); 
      throw ex; 
     } 
    } 

    function getNodeValue(node) { 

     if (node.text) 
      return node.text; 
     return node.innerHTML; 
    }