Javascript 获取不在具有已知类的元素内的元素
假设您有以下HTML代码:Javascript 获取不在具有已知类的元素内的元素,javascript,jquery,html,Javascript,Jquery,Html,假设您有以下HTML代码: <div class="test"> <div class="class1"> <input type="text" data-required="true"/> </div> <input type="text" data-required="true"/> </div> 我想从.test中获取不在.class1div中的所有具有数据required
<div class="test">
<div class="class1">
<input type="text" data-required="true"/>
</div>
<input type="text" data-required="true"/>
</div>
我想从.test
中获取不在.class1
div中的所有具有数据required
属性的元素。
因此,在上面的示例中,只返回第二个输入
我试过:
$(“.test[所需数据]:非(“.class1”))
但是它返回两个输入,因为:not
没有选择父元素
使用一个jQuery选择器可以实现这一点吗
一种方法是:
$(".test [data-required]").filter(function() {
return !$(this).closest('.class1').length;
}).css("background", "red");
.filter()
方法比类似意大利面条的选择器快得多,如果您不想使用.filter()
,可能您可以使用这个长而低效的选择器:
$(".test > [data-required], .test :not(.class1) [data-required]");
使用过滤器()
:
如果要查找的输入始终是
.test
div的直接子项,则可以使用
$(".test > [data-required]").css("background", "red");
小提琴您可以使用下面的选项。它只选择
.test
的直接子级
注意:不会在say.class2
下包含需要数据的元素
$(".test > [data-required]").css("background", "red");
编辑:根据您的进一步澄清进行更新
$(".test [data-required]").each(function() {
if (!$(this).parents('.class1').length)
$(this).css('background-color','red');
});
如果我能。。。仅仅一个选择器就不能做到这一点吗?恐怕不行,选择器不能向上移动,只能向下移动。filter()
到底有什么问题?我认为这是最有用的jQuery函数之一。好吧,如果速度慢,我不会使用像意大利面条一样的选择器。非常感谢。
$(".test [data-required]").each(function() {
if (!$(this).parents('.class1').length)
$(this).css('background-color','red');
});