我有一个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)")
答案 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”的过滤器。在我们的过滤器中,我们为每个元素返回true
或false
。如果我们返回true
,那么该元素将返回到结果集。如果我们返回false
,那么该元素将从结果集中删除。我们问的是元素不是是否是一个选择。这将为所有选择元素返回false
,从而将它们从我们的集合中删除。
答案 2 :(得分:4)
您也可以使用遍历方法尝试:
$('#container').children().not('#selectorId');
或作为最终选择:
$('#container').children().filter(function(){
return $(this).attr('id') !== 'selectorId';
}
答案 3 :(得分:2)
$(#container select).siblings()
答案 4 :(得分:1)
JQuery click handler for everything but a certain object
解决问题的两种方法:8 votes的问题可能就是您要找的问题。
答案 5 :(得分:1)
目前尚不清楚你的问题究竟是什么。 :not(select)将过滤掉所有后代中的select,但它不会输出选择的后代。如果这是您的问题,请尝试以下
$("#container *").filter( function(){
return $(this).closest('select').length === 0
})
答案 6 :(得分:1)
也许这可以帮到你 其中3是#select
尝试以下其中一项:
$("#container *:not(eq(3))");
$("#container").children().filter(:not(eq(3)));