問題:jQuery中遍歷XML文件時候,獲取子節點children不支持的情況(已解決)


問題描述:

今天在寫一個基於 jquery 的讀取xml文件的程序時候,需要遍歷xml的節點。

代碼片段如下:

 1 function parse_xml_node(parent,result){
 2     // result[$(parent)[0].nodeName] = {};
 3     if( false == ($(parent)[0].nodeName in result)){
 4         result[$(parent)[0].nodeName] = {};
 5     }
 6 
 7     // 獲取子節點
 8     var childs = $(parent)[0].children;
 9     // 遍歷子節點
10     $.each(childs,function(i,val){
11         if(i==0){
12             result[$(parent)[0].nodeName]['children'] = [];
13         }
14         result[$(parent)[0].nodeName]['children'].push({});
15         parse_xml_node($(this),result[$(parent)[0].nodeName]['children'][i]); // 函數遞歸
16     });
17 
18     return result;
19 }

其中,parent 代表我需要遍歷的父級節點,然后對獲取到的子節點進行遍歷,也就是 $.each(childs,function(){}) 的程序。

上述程序,采用遞歸的方式,一層層遍歷子節點,直到遍歷完成。

由於是在 Chrome 瀏覽器下開發的,所以在 Chrome 瀏覽器中,解析的是正確的,而在 IE 下卻沒有解析到子節點。

解決方法:

IE瀏覽器下,在上述程序 Line 8 地方打斷點,發現:$(parent)[0] 沒有 children 屬性,度娘后也發現 IE 不支持 children,但是有 childNode 屬性。

而 childNode 節點屬性又分為 TextNode(文本節點)和 元素節點。

找到了問題的原因,就修改程序如下:

 1 var childs = $(parent)[0].children || (function(){
 2     // 兼容IE
 3     var children = [];
 4     $.each($(parent)[0].childNodes,function(i,e){
 5         if (Object.prototype.toString.call(e) === "[object Element]") {
 6             // 判斷是元素節點
 7             children.push(e);
 8         }
 9     });
10     return children;
11 })();

當程序運行時,獲取到 children 屬性,就返回 children的屬性值,若沒有,則 children 值為 undefined。執行 || 之后的程序。

如此改動后,問題解決。

注意:|| 在此處充當短路運算的作用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM