0

私はxmlベースの再帰ディレクトリリストを持っています。たとえば、特定のディレクトリからファイルリストを取得したい.XMLでは、img2.gifとimg3.gifとimg6.gifのみを取得する必要があります.しかし、スクリプトは実際にはサブディレクトリにあるimg4とimg5も返し、サブディレクトリを処理したくありません. 目的は、要求されたディレクトリからファイルを取得し、ネストされたサブディレクトリを無視することです。1 つの方法は、xml 構造をネストされた構造から通常の構造に変更することですが、それは望ましくありません。 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>

ジャバスクリプト

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
4

1 に答える 1

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);
         });
     }
});
于 2013-03-30T15:14:05.007 に答える