选择一个元素及其兄弟

Gar*_*ary 16 jquery siblings jquery-selectors

切换元素及其兄弟元素可以完成如下:

$(this).toggle();
$(this).prev().toggle();
Run Code Online (Sandbox Code Playgroud)

将它们组合起来不起作用:

$(this,$(this).prev()).toggle();
Run Code Online (Sandbox Code Playgroud)

如何同时选择两者?

dri*_*hev 32

对于jQuery 1.8+,使用.addBack():

$(this).prev().addBack().toggle();
Run Code Online (Sandbox Code Playgroud)

对于早期的jQuery版本,请使用已弃用的.andSelf()调用(请参阅演示):

$(this).prev().andSelf().toggle();
Run Code Online (Sandbox Code Playgroud)


jur*_*jcz 8

对于兄弟姐妹和自我:

$(this).prev().andSelf().toggle();
Run Code Online (Sandbox Code Playgroud)

为所有兄弟姐妹和自己:

$(this).parent().children().toggle();
Run Code Online (Sandbox Code Playgroud)


Dav*_*mas 7

顺便说一下,虽然drinchev已经回答了这个问题,但我认为在阅读问题之后我会粘贴这个快速实验,这也很有用.虽然......当它发生时它让我感到惊讶:

$('#recipient').click(
    function(){
        var pair = [this, this.previousElementSibling];
        $(pair).toggleClass('red green');
    });?
Run Code Online (Sandbox Code Playgroud)

JS小提琴演示.

顺便提一下,JS Perf松散地比较了两种选择器的方法.


编辑添加一个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);
?
Run Code Online (Sandbox Code Playgroud)

JS小提琴演示

  • 有一种更简单的方法$(this).prev().andSelf().toggle(); (2认同)