2013-03-30 54 views
0

我有基於xml的遞歸dir列表。我想從特定目錄獲取文件列表。例如,我應該只獲取img2.gif和img3.gif和img6.gif。但腳本也會返回實際位於子目錄中的img4和img5,而我不想處理子目錄。 目標是從請求的目錄中獲取文件並忽略嵌套的子目錄。 一種方法是將xml結構從嵌套更改爲正常,但我不希望這樣。 XML使用jQuery解析遞歸dir列表的嵌套xml

<directory name="."> 
    <file name="img1.gif" /> 
    <directory name="images"> 
     <file name="images/img2.gif" /> 
     <file name="images/img3.gif" /> 
     <directory name="images/delta"> 
     <file name="images/delta/img4.gif" /> 
     <file name="images/delta/img5.gif" /> 
     </directory> 
     <file name="images/img6.gif" /> 
    </directory> 
</directory> 

JAVASCRIPT

function parse_files(path) { 
    $.ajax({ 
     type: "GET", 
     url: "list.xml", 
     dataType: "xml", 
     success: function(xml) { 

      $(xml).find('directory').each(function(){ 
       if($(this).attr('name')==path) { 

        $(this).find('file').each(function(){ 
         var list = $(this).attr('name'); 
         alert(list); 
        }); 
       } 
      }); 
     } 

    }); 
} 

parse_files("images"); 
// returns img2,img3,img4,img5,img6 
// should return img2,img3,img6 

回答

1

只找到直接患兒children(),或find(' > file')或上下文$(' > file', this)等,像剛纔find()發現所有後代,即使是那些有在下一個目錄中進一步向下嵌套:

$(xml).find('directory').each(function(){ 
    if($(this).attr('name')==path) { 
     $(this).children('file').each(function(){ 
      var list = $(this).attr('name'); 
      alert(list); 
     }); 
    } 
}); 
+0

'find()'發現所有'descendents'是更好的解釋,因爲'children'只被認爲是第一級下降 – charlietfl

+0

@charlietfl - 謝謝,我沒有說話speaky englissh好。 – adeneo

+0

謝謝@ adeneo.That訣竅。 有沒有一種方法/語法,我可以與名稱直接到達目錄,所以我不必.find('目錄')。每個(函數()? 我想避免迭代。 – django