只有当容器没有某个类时,jQuery才会选择子项

时间:2016-12-22 19:39:45

标签: jquery jquery-selectors

我想将悬停功能附加到div的孩子身上,但前提是这个div没有特定的课程。为了说明我的意图 - 我希望在鼠标进入任何" .hover-button"时触发悬停功能。 element,UNLESS container" .column"有班级" .disabled"添加到它:



 $('.hover-button').hover( function() { 
   //showing tooltip
 } );

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div class="column">
  <div class="hover-button"></div>
  <div class="hover-button"></div>
  <div class="hover-button"></div>
</div>

<div class="column disabled">
  <div class="hover-button"></div>
  <div class="hover-button"></div>
  <div class="hover-button"></div>
</div>
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:1)

您可以使用jQuery的:not选择器。看一下这段代码,特别是这段代码

.column:not(.disabled) > .hover-button

&#13;
&#13;
$('.column:not(.disabled) > .hover-button').on("mouseover", function() { 
    $(this).css({"background": "gold"}); 
 }).on("mouseout", function() {
    $(this).css({"background": "white"});
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div class="column">
  <div class="hover-button">Hover Here</div>
  <div class="hover-button">And Here</div>
  <div class="hover-button">And Here</div>
</div>

<div class="column disabled">
  <div class="hover-button">But not here</div>
  <div class="hover-button">Or here</div>
  <div class="hover-button">Or here</div>
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

使用Not Method

 $('.column:not(.disabled)')

答案 2 :(得分:1)

您可以在选择器中使用:not()来排除与其他选择器匹配的元素。

但是如果该类将动态更改,则需要使用委托绑定,而不是正常的事件绑定。

$(document).on({
    mouseenter: function () {
        // show tooltip
    },

    mouseleave: function () {
        // remove tooltip
    }
}, '.column:not(.disabled)');

我必须使用mouseentermouseleave,因为hover不是真实事件,所以在委派时你无法绑定它。

答案 3 :(得分:0)

您可以查看父div是否已禁用&#39;像这样的课:

if ($(this).parent().hasClass('disabled')) {
    return false;
}