Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取不在具有已知类的元素内的元素_Javascript_Jquery_Html - Fatal编程技术网

Javascript 获取不在具有已知类的元素内的元素

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

假设您有以下HTML代码:

<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');
});