如何用jQuery选择除DIV内部之外的所有input元素?
解决方法:选中所有不在DIV内部的input元素
你之前的代码$(':input').filter(':not(#CLASSES).children()')逻辑完全跑偏了,:not(#CLASSES)是排除ID为CLASSES的元素,.children()是取子元素,组合起来根本没法筛选出不在DIV里的input。下面给你两种靠谱的实现方式:
方法一:直接用复合选择器
$(':input:not(div :input)')
这个选择器的逻辑很直接::input匹配所有表单控件(input、textarea、select等),:not(div :input)排除掉那些是DIV后代的控件,剩下的就是完全不在DIV内部的input。
方法二:用filter结合closest检查祖先
$(':input').filter(function() { // 向上查找最近的DIV祖先,找不到就保留该元素 return !$(this).closest('div').length; });
这种方式性能更优,因为closest('div')找到第一个DIV祖先就会停止查找,不会遍历整个DOM树。如果你的页面DOM结构比较复杂,优先用这个方法。
补充:如果只想排除直接父级是DIV的input
要是你实际需求是“父元素不是DIV”(允许祖先里有DIV),可以改成这样:
$(':input').filter(function() { return !$(this).parent().is('div'); });
内容的提问来源于stack exchange,提问作者user2799077
相关产品推荐
相关产品推荐

