0

私は次の(人工)DOMを持っています:

<div class="something">xxx</div>
<div class="something">
  <div class="essence">yyy</div>
</div>
<div class="something">zzz</div>
<div class="something">
  <div class="essence">111</div>
</div>

次に、$(document).ready私は:

$('.essence').click(function()
{
    $(this).parent().prevAll('.something > .essence').toggle();
    $(this).parent().nextAll('.something > .essence').toggle();
});

うまくいかないようです..

基本的に、クリックされた要素と同じクラスの子を含まない、クリックされた要素のの前後のすべての兄弟を非表示/表示したい。

助けてください。これが曖昧に思われる場合はお詫び申し上げます

4

4 に答える 4

0

コードは次のように変更する必要があります。

$('.essence').click(function()
{
    $(this).parent().siblings().not(':has("> div")').toggle();
});
于 2013-10-19T20:23:34.980 に答える
0

あなたはこれを試すことができます

$('.essence').click(function()
{
    var className = $(this).attr('class');
    $(this).parent().siblings().filter(function(){
        return !$(this).children('.'+className).length;
    }).toggle();
});

デモ。

于 2013-10-19T19:34:37.477 に答える
0

次のように :has() 拡張機能を使用できます。

$(this).parent().siblings('.something:has(.essence)').toggle();

これにより、クラス .something であり、クラス .essence の子孫を含む .parent() のすべての兄弟が選択されます。または、これを行うこともできます。ドキュメントによると、これはより高速な場合があります。

$(this).parent().siblings('.something').has('.essence').toggle();

私が実際に動作しているのを見ると、一種の奇妙な動作なので、それがまさにあなたが必要としているものかどうかを知るのは難しいです. クラス .essence の子を持たないすべての兄弟を切り替えたい場合は、これを試してください。

$(this).parent().siblings('.something').not(':has(.essence)').toggle();
于 2013-10-19T20:02:01.233 に答える