/var/log/masayoshi/masayoshi.life.log

とりあえず、書きたいこと書くだけ。

走り書き:jqueryで特定の要素を除外しつつ取得したい場合

jqueryではおもにxmlファイルを(スクリプトで吐き出した)のを取っているのだがその時にひっかかったことがあるのでメモ代わりに

使うxmlファイル

<list>
   <file>nabe.pl</file>
   <file>ami.pl</file>
   <file>prate.pl</file>
   <dir>
      <file>sukiyaki.pm</file>
      <file>chanko.pm</file>
      <file>ishikari_nabe.pm</file>
      <file>shabushabu.pm</file>
   </dir>
</list>

って感じで、直下と

直下にというタグが並んでいます。
これを

function list_loading(dir){
    $(function(){
            $.ajax({
                    url: 'file_listing.php',
                        dataType: 'xml',
                        success : function(data){
                        $("list",data).each(function(){
                                if($("file",this)){//ディレクトリの列
                                    alert($("file",this).size()) ;
                                }else if($("dir",this)){
                                    alert($("dir > file",this).size()) ;
                                }
                            }
                            )
                            }
                })
                })
}

やりたいこと

  • list直下のfileの数を知りたい
  • dirに遭遇した場合はそのディレクトリ以下のfileを数えたい

実際には・・・正確に動きません
動かしたらlistの中にあるfile全部を返してきます、どうすればいいの?
こうしましょう

function list_loading(dir){
    $(function(){
            $.ajax({
                    url: 'file_listing.php',
                        dataType: 'xml',
                        success : function(data){
                        $("list",data).each(function(){
                                if($("file:not(dir > file)",this)){//ディレクトリの列
                                    alert($("file",this).size()) ;
                                }else if($("dir",this)){
                                    alert($("dir > file:not(file)",this).size()) ;
                                }
                            }
                            )
                            }
                })
                })
}

変わったのはセレクタ「$("file",this)」に「:not(dir > file)」とついたところでしょうか、こいつは「このセレクタに合うタグは除外する」というセレクタです。
これだと・・・list直下のfileの数だけが返ってきます、ということでメモでした。