18

要素とその兄弟の切り替えは、次のように実行できます。

$(this).toggle();
$(this).prev().toggle();

それらを組み合わせてもうまくいきません:

$(this,$(this).prev()).toggle();

両方を同時に選択するにはどうすればよいですか?

4

4 に答える 4

36

jQuery 1.8以降の場合は、次を使用します.addBack()

$(this).prev().addBack().toggle();

以前のバージョンのjQueryの場合は、非推奨の.andSelf()呼び出しを使用します(デモを参照)。

$(this).prev().andSelf().toggle();
于 2012-04-22T16:04:30.813 に答える
11

前の兄弟と自分の場合:

$(this).prev().andSelf().toggle();

すべての兄弟と自分の場合:

$(this).parent().children().toggle();
于 2012-04-22T16:48:50.733 に答える
7

ちなみに、この質問はすでにdrinchevによって回答されていますが、質問を読んだ後、私が行ったこの簡単な実験を貼り付けたいと思いました。これも機能します。とはいえ...それが起こったとき、それは私を驚かせました:

$('#recipient').click(
    function(){
        var pair = [this, this.previousElementSibling];
        $(pair).toggleClass('red green');
    });​

JSフィドルデモ

ちなみに、JSPerfは2つのセレクターアプローチを大まかに比較しています。


IEを追加するために編集されました-(私が知る限り)フレンドリーなアップデートですが、現在、機能を検出するのではなく、すべてのブラウザーにIEを追加しています(また、私はついに青!=緑に気づきました):

function pESibling(n){
    var nPS = n.previousSibling;
    if (!n || nPS === null){
        return false;
    }
    else if (nPS.nodeType == 1){
        return nPS;
    }
    else {
        return pESibling(nPS);
    }
}

var that = document.getElementById('recipient'),
    pair = [that, pESibling(that)];
$(pair).toggleClass('red green');
console.log(pair);
​

JSフィドルデモ

于 2012-04-22T16:11:27.333 に答える
1

また動作します:

$(this).prev().add($(this)).toggle()
于 2014-09-23T08:59:09.997 に答える