Подтвердить что ты не робот

Как использовать 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)")
4b9b3361

Ответ 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';
}

Ответ 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)));