CSS Multi Selector(交集)不工作

时间:2015-01-05 07:37:40

标签: jquery css jquery-selectors jquery-multiselect

我正在尝试使用jquery来切换某些类的显示属性(打开和关闭)。

我正在尝试在图片和下面的文字之间切换,以点击

切换
<div class="fab red off">
    <img class="community_service_icon" src="http://placehold.it/50x50">
    <div class="community_service_text">
        Charity Run<br/>
        Charity Sale<br/>
        Bake Sale<br/>
        Photo Exhibition<br/>
    </div>
</div>

以下是我的jquery函数:

jQuery(function($) {
  $('.fab.red.off').click(function() {
    $(this).removeClass( 'off' ).addClass( 'on' );
    $(this).children( '.community_service_icon' ).css('display', 'none');
    $(this).children( '.community_service_text' ).css('display', 'block');
  });
});

jQuery(function($) {
  $('.fab.red.on').click(function() {
    $(this).removeClass( 'on' );
    $(this).addClass( 'off' );
    $(this).children( '.community_service_icon' ).css('display', 'block');
    $(this).children( '.community_service_text' ).css('display', 'none');
  });
});

第一次点击成功隐藏图像并显示文本,它还将类更改为“fab red on ”。然而,当我再次点击fab div时,它似乎运行第一个带有选择器'.fab.red.off'的函数而另一个函数没有被触发。

有什么想法吗?并且非常感谢任何优化此代码的建议。

干杯

4 个答案:

答案 0 :(得分:4)

您可以使用.toggle()简化代码,如果元素可见则隐藏元素,并显示元素是否可用。

&#13;
&#13;
jQuery(function($) {
  $('.fab.red').click(function() {
    $(this).find('.community_service_icon').toggle();
  });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="fab red">
  <img class="community_service_icon" src="http://placehold.it/50x50">
  <div class="community_service_text">
    Charity Run
    <br/>Charity Sale
    <br/>Bake Sale
    <br/>Photo Exhibition
    <br/>
  </div>
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

$('.fab.red').click(function() {
  $(this).toggleClass('off');
});
.off img {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="fab red">
  <img class="community_service_icon" src="http://placehold.it/50x50">
  <div class="community_service_text">Charity Run
    <br/>Charity Sale
    <br/>Bake Sale
    <br/>Photo Exhibition
    <br/>
  </div>
</div>

答案 2 :(得分:0)

好吧,你的点击处理程序被绑定了#34;静态地#34;一旦你的页面加载;此时,有一个元素匹配.fab.red.off选择器,没有匹配.fab.red.on的元素。更改类时,不会重新绑定事件处理程序。

jQuery .on()http://api.jquery.com/on/)可能是您正在寻找的东西。

编辑:注意selector参数。

答案 3 :(得分:0)

使用.on()功能,如下所示docs

jQuery(function($) {
    $(document).on('click', '.fab.red.off', function() {
    $(this).removeClass( 'off' ).addClass( 'on' );
    $(this).children( '.community_service_icon' ).css('display', 'none');
    $(this).children( '.community_service_text' ).css('display', 'block');
  });
});

jQuery(function($) {
  $(document).on('click', '.fab.red.on', function() {
    $(this).removeClass( 'on' );
    $(this).addClass( 'off' );
    $(this).children( '.community_service_icon' ).css('display', 'block');
    $(this).children( '.community_service_text' ).css('display', 'block');
  });
});

<强> Working Fiddle