Как использовать jQuery для выбора всех дочерних элементов, кроме элемента select - PullRequest
50 голосов
/ 14 июля 2009

У меня есть div (скажем, id - «контейнер»), в котором много элементов, включая элемент select. Я хотел бы выбрать все в div, кроме select. Вещи, которые я пробовал:

$("#container *:not(select)")
$("#container *:not(#selectorid)")

//put a div around the select and...
$("#container *:not(#selectorcontainer)")
$("#container *:not(#selectorcontainer *)")
$("#container *:not(#selectorcontainer, #selectorcontainer *)")

Также пробовал без подстановочного переключателя, так же как и все выше, но

$("#container:not(#selectorid)")

Ответы [ 7 ]

73 голосов
/ 14 июля 2009

Вы можете просто опустить подстановочный знак, так как он необязателен в этом случае, но оставьте пробел:

$('#container :not(select)');

Либо используйте метод .not (), чтобы отфильтровать выбор после выбора всех дочерних элементов:

$('#container').children().not('select');

Если ваша проблема в том, что дочерние элементы select все еще включены, вы можете явно отфильтровать их с помощью метода .not ():

$('#container').children().not('select, option, optgroup');

или выберите только прямых детей:

$('#container > :not(select)');

Вы можете опробовать селекторы jQuery на интерактивном тестере селекторов jQuery для быстрой обратной связи; попробуйте, например, div :not(ol) или div > :not(ol), чтобы понять, какую разницу имеет прямой дочерний (>) селектор.

4 голосов
/ 14 июля 2009

Вы также можете попробовать это, используя методы обхода:

$('#container').children().not('#selectorId');

или окончательный вариант:

$('#container').children().filter(function(){
    return $(this).attr('id') !== 'selectorId';
}
4 голосов
/ 14 июля 2009

Использование :not и .not() для выбора и фильтрации " Live Demo

:not(selector) делает именно это, и поставляется в нескольких стилях. Вы можете использовать селектор или метод . Ниже приведен пример использования селектора:

$("#container :not(select)");

Это будет соответствовать любому дочернему элементу в #container, который является , а не a <select> элементом. Тогда у нас есть метод fashion исключения, который называется тем же именем, но должен запускаться по-другому:

$("#container").children().not("select");

Это работает против children соответствующих элементов. В этом случае .not действует как фильтр. Который подводит меня к следующему примеру, используя .filter(), чтобы получить желаемые результаты. С помощью этого метода мы можем предоставить нашу собственную пользовательскую функцию, чтобы покопаться в результатах и ​​выбрать те, которые мы хотим:

Использование .filter() для фильтрации соответствующих элементов " Live Demo

$( "#container" ).children().filter( isNotSELECT ).fadeTo( "slow", .5 );​​​​​​​​​​​​​​​​​​​​​​​​​​​

function isNotSELECT () {
    // Returns TRUE if element is NOT select
    return !$(this).is("select");
}

В этом примере мы выбираем все дочерние элементы #container, а затем пропускаем их через фильтр, который мы определили, называемый isNotSelect. В нашем фильтре мы возвращаем либо true, либо false для каждого элемента. Если мы вернем true, этот элемент будет возвращен в набор результатов. Если мы вернем false, этот элемент будет удален из набора результатов. Мы спрашиваем, является ли элемент не выбором. Это вернет false для всех выбранных элементов, удалив их из нашей коллекции.

2 голосов
/ 18 мая 2012
$(#container select).siblings()

http://docs.jquery.com/Traversing/siblings

1 голос
/ 15 июля 2009

Может быть, это может помочь вам где 3 - это # ​​select

попробуйте один из них:

$("#container *:not(eq(3))");
$("#container").children().filter(:not(eq(3)));
1 голос
/ 14 июля 2009

Не понятно, чего вы на самом деле хотите от своего вопроса. : not (select) отфильтрует выбор из всех потомков, но не выберет потомков. Если это ваша проблема, попробуйте следующее

Демо

$("#container *").filter( function(){ 
    return $(this).closest('select').length === 0 
})
1 голос
/ 14 июля 2009

JQuery обработчик кликов для всего, кроме определенного объекта
Два подхода к проблеме: Вероятно, вы ищете тот, который 8 голосов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...