Search code examples
jqueryjquery-selectorssiblings

Select an element and its siblings


Toggling an element and its siblings can be accomplished as:

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

Combining them doesn't work:

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

How can both be selected at the same time?


Solution

  • Incidentally, while this question has already been answered by drinchev, I thought I'd paste this quick experiment I just did, after reading the question, which also works. Albeit...it surprised me when it did:

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

    JS Fiddle demo.

    Incidentally, a JS Perf loose comparison of the two selector approaches.


    Edited to add an IE-(so far as I know)-friendly update, albeit I'm currently saddling all browsers with it, rather than feature-detecting (also, I finally realised that blue != green):

    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 Fiddle demo