2012-04-12 11 views

答えて

1

あなたは、ネストの検索を容易にするために、いくつかのID、クラス、またはデータレベルのオブジェクトを追加することができますか、あなたはこの少しハックバージョン行うことができます:

$('div.A').first().children('span.B').last(); 

を私はデータを追加することを示唆しているでしょうレベルを扱うレベル、ID、その他のクラス。例えば

のために、HTMLを変更します。

<div class="A" data-level="first"> 

    <span class="B" data-level="second"></span> 
    <span class="B" data-level="second"></span> 

    <span class="B" data-level="second"> 
    <div class="A" data-level="third"> 
     <span class="B" data-level="fourth"></span> 
    </div> 
    </span> 

</div> 

とあなたのようなことを行うことができます。

$('span.B[data-level="second"]').last(); 

など

+0

データ・レベルによっては、あなたが、私は ''要素のいくつかの許可既存の属性を使用しての深さを格納するためにそれを使用する必要があります意味ですか「」要素ですか?例えば、 'title'属性の中に? IDは一意でなければならないので、IDを実際に追加することはできません。 – Jack

+0

私の編集を参照してください。あなたのhtmlはやや変形していました。私もそれを修正しました – Evan

+0

は 'data-level'ですか? – Jack

0

jQueryが:lastセレクタを持っています。あなたが選択しようとしているオブジェクトがまだ完全にはわかりません。

ルート<div class="A">の直接の子である最後の<span class="B"></span>をしたい場合は、これらのオプションがあります。

1)ルートに識別クラスを与える:

<div class="A root"> 

    <span class="B></span> 
    <span class="B></span> 

    <span class="B"> 
    <div class="A"> 
     <span class="B"></span> 
    </div> 
    </span> 

</div> 

そして、このセレクタ:

A.root > .B:last 

2)それを識別するために、ルートオブジェクトの親を指定します。

body > .A > .B:last 

3)ルートオブジェクトを識別するためにいくつかのコードを使用します。

$(".A").filter(function() { 
    // filter out items that have an "A" class as a parent 
    return($(this).parents(".A").length == 0); 
}).children(".B:last"); 
+0

問題はパターンの繰り返しです。再帰的な関数呼び出しで生成されます。ルート要素に固有のものを追加することはできません。 – Jack

+0

@Jack - おそらく私はあなたがしたいことを理解していないでしょう。私はあなたがトップレベルの "A"要素の直接の子であった最後のB要素を望んでいると思った。そのためには、トップレベルの "A"要素を何らかの形で特定しなければなりません。私の新しいオプション3)は、コードを使ってそれを識別します。あなたが何か違うことをしようとしているなら、あなたが何をしようとしているかをもっと具体的に説明してください。 – jfriend00