Как использовать jQuery для выбора всех детей, кроме элемента select
У меня есть 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)")
Ответы
Ответ 1
Вы можете просто опустить подстановочный знак, поскольку в этом случае он является необязательным, но сохраните пробел:
$('#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)
, чтобы понять, в чем разница, которую делает селектор direct child (>
).
Ответ 2
Используя :not
и .not()
для выбора и фильтрации & raquo; Live Demo
:not(selector)
делает именно это, и он поставляется в нескольких стилях. Вы можете использовать селектор или метод. Ниже приведен пример использования селектора:
$("#container :not(select)");
Это будет соответствовать любому дочернему элементу #container
, который не является элементом <select>
. Тогда у нас есть метод исключения, который имеет одно и то же имя, но должен выполняться по-разному:
$("#container").children().not("select");
Это выполняется против children
согласованных элементов. В этом случае .not
действует как фильтр. Это приводит меня к следующему примеру, используя .filter()
, чтобы получить нужные результаты. С помощью этого метода мы можем предоставить нашу собственную пользовательскую функцию, чтобы рыться в результатах и выбрать те, которые мы хотим:
Использование .filter()
для фильтрации согласованных элементов & raquo; 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
для всех элементов select, удалив их из нашей коллекции.
Ответ 3
Вы также можете попробовать его с помощью методов перемещения:
$('#container').children().not('#selectorId');
или является окончательным вариантом:
$('#container').children().filter(function(){
return $(this).attr('id') !== 'selectorId';
}
Ответ 4
$(#container select).siblings()
http://docs.jquery.com/Traversing/siblings
Ответ 5
Обработчик JQuery для всего, кроме определенного объекта
Два подхода к проблеме: один с 8 голосов, вероятно, тот, который вы ищете.
Ответ 6
Неясно, чего вы действительно хотите от своего вопроса.
: not (select) отфильтровывает выбор из всех потомков, но не выберет выбранных потомков. Если это ваша проблема, попробуйте следующее
Демо
$("#container *").filter( function(){
return $(this).closest('select').length === 0
})
Ответ 7
возможно, это может помочь вам
где 3 - это #select
попробуйте один из них:
$("#container *:not(eq(3))");
$("#container").children().filter(:not(eq(3)));