15

我正在尝试在 jQuery 中为具有特定类的父元素的元素创建一个 if 语句。

到目前为止,这是我想出的,但这是不对的。

if(!$(".myElem").parents(".myDiv")) {
    console.log("test")
};

谁能指出我正确的方向。

4

7 回答 7

27

用于length检查选择器中是否有元素,并且比一旦找到匹配就停止closest()会更好:parents()

if(! $(".myElem").closest(".myDiv").length ) {
    console.log("has no parent with the class .myDiv")
}
于 2013-03-28T11:28:21.773 回答
6

如果您正在测试具有类的元素是否myElem具有类 myDiv 的直接父级,请使用以下测试

if(!$(".myElem").parent().hasClass("myDiv")) {
    console.log("test")
};
于 2013-03-28T11:28:45.393 回答
3
if($(".myElem").parent().hasClass(".myDiv")) {
    console.log("has a parent with the class .myDiv")
}
else
{
    console.log("no parent class .myDiv found")
}
于 2013-03-28T11:36:33.330 回答
1

这应该选择那些具有类 myElem 且其父类具有类 myDiv 的元素:

$(".myElem").filter(function(elem) {
    return $(this).parents(".myDiv").length
});

或者这应该选择那些具有类 myElem 并且没有具有类 myDiv 的父元素的元素:

$(".myElem").filter(function(elem) {
    return !$(this).parents(".myDiv").length
});
于 2013-03-28T11:33:53.010 回答
1

如果 $('.myElem') 具有多个元素,则唯一有效的解决方案是 Zoltan 的解决方案

看这里的例子

 var takeElements = $('.myElement').filter(function(){
   return $(this).closest('.bannedAncestors').length === 0
 });
 
 takeElements.css('color','green');
 
 var bannedElements = $('.myElement').filter(function(){
   return $(this).closest('.bannedAncestors').length !== 0
 });
 
 bannedElements.css('color','red');
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="bannedAncestors">
  <div> number of nested element don't matters
    <div class="myElement">
      don't take this child since it has an ancestor we don't want
    </div>
  </div>
</div>
<div>
  <div>
    <div class="myElement">
      but this one is ok
    </div>
  </div>
</div>

于 2019-05-20T21:08:02.400 回答
0

试试这个。

   if($("#child").parent("span#parent").length > 0)
   {
          console.log("parent is span");

   }
   else {
          console.log("parent is not span or no parent");
   }
于 2013-03-28T11:38:41.377 回答
0

.closest()如果您知道孩子的类名,则更好的方法是使用。

if(!$('yourtag.childClass').closest('yourParentTag').hasClass('classname')){
    console.log('does not exist');
}
于 2013-03-28T12:01:43.937 回答