如何使用jQuery来select除select元素之外的所有子项

我有一个div(比方说id是“容器”),里面有很多元素,包括select元素。 我想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 *)") 

也尝试没有通配符后代select器,所以就像以上所有,但

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

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

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

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

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

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

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

或仅select直接子女:

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

您可以在交互式jQueryselect器testing程序中尝试jQueryselect器以获得快速反馈; 尝试例如div :not(ol)div > :not(ol)来感受直接子( > )select器的不同之处。

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

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

或者是最后的select:

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

使用:not ,和.not()来select和过滤» 现场演示

:not(selector)正是这样做,它有几种风格。 您可以使用select器方法 。 下面是使用select器的一个例子:

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

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

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

这违背了匹配元素的children 。 在这种情况下, .notfilter的作用。 下面的例子使用.filter()来得到你想要的结果。 用这个方法,我们可以提供我们自己定制的function,通过search结果并挑选我们想要的:

使用.filter()过滤匹配的元素» 现场演示

 $( "#container" ).children().filter( isNotSELECT ).fadeTo( "slow", .5 );​​​​​​​​​​​​​​​​​​​​​​​​​​​ function isNotSELECT () { // Returns TRUE if element is NOT select return !$(this).is("select"); }  $( "#container" ).children().filter( isNotSELECT ).fadeTo( "slow", .5 );​​​​​​​​​​​​​​​​​​​​​​​​​​​ function isNotSELECT () { // Returns TRUE if element is NOT select return !$(this).is("select"); } 

在这个例子中,我们select#container所有孩子,然后通过我们定义的名为“isNotSelect”的filter传递它们。 在我们的filter中,我们为每个元素返回truefalse 。 如果我们返回true ,那么这个元素将被返回给结果集。 如果我们返回false ,那么该元素将从结果集中移除。 我们问这个元素是不是一个select。 这将为所有select元素返回false ,从而将其从我们的集合中删除。

 $(#container select).siblings() 

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

目前还不清楚你真正想从你的问题。 :not(select)会从所有后代中过滤出select,但是不会从select后裔中删除。 如果这是你的问题,然后尝试以下

演示

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

JQuery单击处理程序的一切,但某个对象
解决问题的两种方法: 8票的那个可能是你正在寻找的那个。

也许这可以帮助你3#是select

尝试其中之一:

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