【问题标题】:jQuery select children only if container NOT have certain class仅当容器没有特定类时,jQuery 才选择子项
【发布时间】:2017-05-08 12:23:38
【问题描述】:

我想将悬停功能附加到 div 的子级,但前提是此 div 没有特定的类。为了说明我的意图 - 我希望鼠标进入任何“.hover-button”元素时触发悬停功能,除非容器“.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>

【问题讨论】:

标签: jquery jquery-selectors


【解决方案1】:

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

但如果类会动态变化,则需要使用委托绑定,而不是普通的事件绑定。

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

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

我不得不使用mouseentermouseleave,因为hover不是一个真实的事件,所以你不能在委托时绑定它。

【讨论】:

    【解决方案2】:

    使用 Not 方法

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

    【讨论】:

      【解决方案3】:

      您可以像这样检查父 div 是否具有“禁用”类:

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

      【讨论】:

        【解决方案4】:

        您可以使用 jQuery 的 :not 选择器。看看这段代码,尤其是这个sn-p

        .column:not(.disabled) &gt; .hover-button

        $('.column:not(.disabled) > .hover-button').on("mouseover", function() { 
            $(this).css({"background": "gold"}); 
         }).on("mouseout", function() {
            $(this).css({"background": "white"});
        });
        <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>

        【讨论】:

        • 感谢您的回答!将您的答案标记为最佳答案,因为它简单且包含示例。
        • 很高兴为您提供帮助
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-24
        • 1970-01-01
        • 2013-06-18
        • 1970-01-01
        相关资源
        最近更新 更多