如何使用jQuery选择除select元素之外的所有子元素

时间:2009-07-14 14:19:24

标签: jquery drop-down-menu

我有一个div(假设id是“容器”),里面有很多元素,包括一个select元素。除了select之外,我想选择div中的所有内容。 我尝试过的事情:

$("#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 个答案:

答案 0 :(得分:73)

您可以简单地省略通配符,因为在这种情况下它是可选的,但保留空格:

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

或者,使用.not()方法在选择所有子项后过滤掉select:

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

如果您的问题是仍然包含select的孩子,您可以使用.not()方法明确过滤掉这些孩子:

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

或仅选择直接儿童:

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

您可以在the interactive jQuery selector tester尝试jQuery选择器以获得快速反馈;试着举例div :not(ol)div > :not(ol)来了解直接子(>)选择器的不同之处。

答案 1 :(得分:4)

使用:not.not()选择并过滤»Live Demo

:not(selector)就是这样做的,它有几种风格。您可以使用选择器方法。以下是使用选择器的示例:

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

这将匹配#container <select>元素的所有儿童。然后我们有排除的方法,它的名称相同,但必须以不同的方式运行:

$("#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”的过滤器。在我们的过滤器中,我们为每个元素返回truefalse。如果我们返回true,那么该元素将返回到结果集。如果我们返回false,那么该元素将从结果集中删除。我们问的是元素不是是否是一个选择。这将为所有选择元素返回false,从而将它们从我们的集合中删除。

答案 2 :(得分:4)

您也可以使用遍历方法尝试:

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

或作为最终选择:

$('#container').children().filter(function(){
    return $(this).attr('id') !== 'selectorId';
}

答案 3 :(得分:2)

$(#container select).siblings()

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

答案 4 :(得分:1)

JQuery click handler for everything but a certain object
解决问题的两种方法:8 votes的问题可能就是您要找的问题。

答案 5 :(得分:1)

目前尚不清楚你的问题究竟是什么。 :not(select)将过滤掉所有后代中的select,但它不会输出选择的后代。如果这是您的问题,请尝试以下

Demo

$("#container *").filter( function(){ 
    return $(this).closest('select').length === 0 
})

答案 6 :(得分:1)

也许这可以帮到你 其中3是#select

尝试以下其中一项:

$("#container *:not(eq(3))");
$("#container").children().filter(:not(eq(3)));