Выберите элемент и его братьев и сестер


Переключение элемента и его братьев и сестер может быть выполнено следующим образом:

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

Объединение их не работает:

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

Как можно выбрать и то и другое одновременно?

4 14

4 ответа:

Кстати, хотя на этот вопрос уже был дан ответ дринчевым, я решил вставить этот быстрый эксперимент, который я только что сделал, прочитав вопрос, который также работает. Albeit...it удивило меня, когда это произошло:

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

JS Fiddle demo .

Кстати, aJS 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);
​

JS Fiddle demo

Для jQuery 1.8+ используйте .addBack():

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

Для более ранних версий jQuery используйте устаревший вызов .andSelf() (см. демонстрацию ):

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

Для предыдущих братьев и сестер и себя:

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

Для всех братьев и сестер и для себя:

$(this).parent().children().toggle();

Также работает:

$(this).prev().add($(this)).toggle()