Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.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
Jquery 使用not()排除子项,但不起作用_Jquery - Fatal编程技术网

Jquery 使用not()排除子项,但不起作用

Jquery 使用not()排除子项,但不起作用,jquery,Jquery,我尝试使用not()函数从选择器中排除子类,但它仍然选择子类。我知道我可以使用.parentClass>.childClass选择我想要的所有子类,但我有很多子类,只想排除一个子类 我这里有一个简单的例子(p标签不应该有黄色背景色): HTML: <li class='list'> <p class='pa'>test</p> <button class='btn'>click</button> </li> <

我尝试使用
not()
函数从选择器中排除子类,但它仍然选择子类。我知道我可以使用
.parentClass>.childClass
选择我想要的所有子类,但我有很多子类,只想排除一个子类

我这里有一个简单的例子(
p
标签不应该有黄色背景色):

HTML:

<li class='list'>
  <p class='pa'>test</p>
  <button class='btn'>click</button>
</li>
<li class='list'>
  <p class='pa'>test</p>
  <button class='btn'>click</button>
</li>
JS:


或者,您可以使用它将过滤掉
.list
元素,该元素不包含类,也不包含其子元素。要检查子级,请使用jQuery伪类选择器

$(document).ready(function(){
    $('.list:not(:has(.pa))').addClass('yellow');
})
$(文档).ready(函数(){
$('.list:not(:has(.pa))).addClass('yellow');
})
.yellow{
颜色:黄色
}

  • 试验

    点击
  • 试验

    点击
  • 测试

    点击

您可以使用
.filter
筛选出包含子项的项目
.pa

$(文档).ready(函数(){
$('.list').filter(函数(){
返回$('.pa',this).length==0;
}).addClass(“黄色”);
})
.yellow{
颜色:黄色
}

  • 试验

    点击
  • 试验

    点击

。不仅过滤当前选择。子节点不是当前选择的一部分。
$('.list:not(.pa)
选择具有类
list
但不具有类
pa
的元素。它与孩子们无关。选择器不会做你认为它会做的事情。它表示“对于类
列表中的所有元素,而不是类
.pa中的所有元素,添加黄色类”。但是,您的
pa
元素是
列表
元素的子元素,因此
:not
什么都不做。您的最终目标是什么?根据当前的代码和解释,如果只针对没有.pa子级的列表项,则没有列表项会获得黄色类。我想你想让css影响父母而不是孩子?那是。。。jquery无法帮助您,css也无法帮助您。因此,我希望选择一个包含多个子类的父类,但有一个子类我不希望它包含在此选择中。
$(document).ready(function(){
    $('.list:not(.pa)').addClass('yellow');
})
$(document).ready(function(){
    $('.list:not(:has(.pa))').addClass('yellow');
})