2011-01-12 6 views
1

Per my SO question hereこれを解決するためにjqueryになっていますが、思考を真っ直ぐにするとYUIに戻ってきて、子孫を除外するセレクタが必要です。ネストされた子孫を除外するためのjqueryセレクターとは何ですか?

提案された解決策は、このような何か言う:私は同じテストを実行するために、複数のHTMLチャンクを持っているので、私の状況をより正確に合うようにするに

$('.revealer:not(.revealer > .revealer)'); 

を、私はそれが更新されています:

$('#_revealerEl_0 .handle:not(#_revealerEl_0 .reveal .handle)'); 

HTMLその上の選択(画像ページ上でこの同じチャンクの多数のコピーを、単独で処理すべき必要がそれぞれ存在する - id属性は、各「啓示」に割り当てられている)は:

<div class="revealer" id="#_revealerEl_0"> 
    <div class="hotspot"> 
    <a class="handle" href="javascript:;">A</a> 
    <div class="reveal"> 
     <p>Content A.</p> 
    </div> 
    <div class="reveal"> 

     <p>Content B.</p> 

     <!-- nested revealer --> 
     <div class="revealer"> 
      <div class="hotspot"> 
      <a class="handle" href="javascript:;">A</a> 
      <div class="reveal"> 
       <p>Sub-content A.</p> 
      </div> 
      <div class="reveal"> 
       <p>Sub-content B.</p> 
      </div> 
      </div> 
     </div> 

    </div> 
    </div> 
</div> 

一言で言えば、私は、「ホットスポット」内の「トップレベル」のハンドルを公開者ごとに指定する必要があります。同じクラス名を持つネストされた子孫は対象にしません。

おかげで、 D

EDIT:

それは私がなどのparentNode、childNodeが[x]は、nextSibling、などの子孫の性質に依存することを開始していないことも非常に重要です...現在、このモジュール理由'ヒント'と 'ハンドル'要素が他のマークアップ内に存在し、依然としてターゲットとされているという点で、「ホットスポット」内にある限り、非常に柔軟です。

+0

の可能重複[望ましくない子孫を除外する方法?](http://stackoverflow.com/questions/4663793/how-to-exclude-undesired-descendants)あなたは、あなたの最後の質問に余分な詳細に編集する必要があります –

+0

まったく同じ問題に対処する新しい質問をするのではなく、 –

+0

私はユースを使用しています(推奨)、1つはjqueryを使用しています - 私は5つのタグに制限されています。確かに行きましょう。 – danjah

答えて

0

あなたの#_revealerEl_0要素がわかりませんが、これがトップレベルの場合は.revealerだとできませんか?

$('#_revealerEl_0 > .hotspot > .handle') 

またはトップレベル.revealer#_revealerEl_0の子孫そのものである場合、これは動作します:ここに

$('#_revealerEl_0 > .revealer > .hotspot > .handle') 

基本的な前提は、あなたが複数の>子コンビネータをチェーンということです。

+0

私は上記のIDを持つために私のコードを修正しました、申し訳ありませんが、私のモジュールがインスタンス化されるまでそれを持っていないが、私のテストwrtからここに記載されている他の質問 - あなたのコードは、コンテナ。私はすべてのハンドルを収穫する必要があります(複数のクラス分けされた要素を扱うことができます)が、入れ子にされた* revealerの内部では処理されません。 – danjah

+0

@ダンジャー:私の最初の提案はあなたのために働くのですか? – BoltClock

+0

jQueryの考え方を使ってYUIでこれを解決しましたが、CSS3を選択する際のレッスンとして、私はこれらの解決策を試してみました。正直言って私はこれらのいずれかを拾うことができませんでしたが、私は彼らがあまり進んでいないかもしれないよりきれいな状況で働いていると思います。いずれにしても、私があなたの提案のまわりで行った読書は非常に面白かったです。あなたの助けを借りてくれてありがとう。 – danjah

0

これを試してみてください:

  obj = $('.revealer[id*="revealerEl"]'); 
    //this will give you what you are after 
    result = $("> .hotspot > .handle",obj) 

    //if you want to see them in red 
     $("> .hotspot > .handle",obj).css('color','red'); 

//or assign a click to it 
$("> .hotspot > .handle",obj).click(function(){ 
//blah .... 
}) 
+0

私はそれをすべて持っています。私は適切なセレクタの後ろにある、「啓示者」の中の「ホットスポット」内のすべての潜在的な「処理」クラス要素を対象にしていますが、他の「公開者」の中にネストされているときは – danjah

+0

兄弟/親/子関係に依存しないことの重要性を私の他の質問から反映して私の質問を編集しました。なぜなら、私が現在持っている(そしてクリーンアップしようとしている)これらのオブジェクトへの余分なマークアップは、いつでも必要とされ、それらの機能はクラスターゲットなので同じままです。 – danjah

+0

あなたの問題に対処するために私の答えを変更しました。 – Michal

0

これはjQueryのを使用して私の作品:

$('.revealer:first > .hotspot > .reveal') 

を最初の啓示を考えると、DIRECT子である任意のホットスポットを見つけ、任意のDIRECTは、内の項目を明らかに見つけます。、任意のハンドルについて

  • 要素
  • にクリックイベントの機能を割り当てる:

    $('.handle').click(function(){ 
        $(this).closest('.hotspot > .reveal').show(); 
    }); 
    

    上記に変換します。

    だから、あなたの「ハンドル」にハンドラを割り当てますハンドルがクリックされ、最も近い親ホットスポットが見つかる

  • ホットスポットから、ホットスポットの直接の子であるすべての表示要素を見つける
  • display:noneで非表示にした場合、これらの要素を表示します。
+0

これは非常にきちんとしていて、私がたくさん使っていることは、あなたが教えてくれますか?「直接」という言葉で言えば、それは本質的に「parentNode」でなければならないということです。うまくいけば、私は間違いなくこのための使用を見つけるだろう。 – danjah

+0

@Danjahそれは非常に徹底しているので、セレクタに関するjqueryのドキュメントを調べる価値があるでしょう。 >構文は、RHS.parentNode == LHSを意味します。したがって、reveal.parentNode == hotspot。ホットスポットが親であることが保証されていない場合、明らかにこれは機能しません。 –

関連する問題