javascript - 制作点击事件只影响父类的 child ?

标签 javascript jquery html css twitter-bootstrap

我正在尝试为我的网站创建一个可扩展的搜索过滤器列表。每个类别都有子类别。我正在使用 Bootstrap,所以我选择使用 BS Accordion 的定制版本。我有它,所以当你点击一个“父”类别时,父级旁边的 Font Awesome “加号”图标变成一个“减号”以显示折叠列表作为下一个 Action (如通常所见)。

例如:

+Computers

+Phones

-Tablets

   Android Tablets

   Windows Tablets

   Apple iPads

问题是,如果您单击 Tablets 将其展开(如我上面的示例所示),然后再次单击它以折叠 tablets 列表,它将切换所有其他父 Accordion 列表的所有图标,并带有一个事件的加号图标负号,即使它们已折叠。

这是我的 jquery:

$('.categories').click(function(){
var collapsed=$(this).find('i').hasClass('fa-plus-square-o');

$('.categories').find('i').removeClass('fa-minus-square-o');

$('.categories').find('i').addClass('fa-plus-square-o');
if(collapsed)
    $(this).find('i').toggleClass('fa-plus-square-o fa-minus-square-o')
});

我觉得必须有比我试图实现它的方式更好的可用解决方案。我可以编写 jquery 来只影响实际被点击的元素,而不必使用大量的 ID 和过多的 jquery 来解释每个 ID 吗?我觉得每个列表的新 ID 可能会变得非常困惑,因为我们可能有 30 多个可扩展列表,更不用说主列表中可能存在子列表的可能性(试图解释任何可能性并使它可扩展,因为这些类别将是动态的而不是硬编码的)像这样:

-Tablets

  -Android Tablets

    +Asus Tablets

    +Nvidia Tablets

    -Nexus Tablets

        Nexus 7"

        Nexus 10"

    +HTC Tablets

最佳答案

为简单起见:

$('.categories').click(function(){
  $(this).toggleClass('fa-plus-square-o').toggleClass('fa-minus-square-o')
});

关于javascript - 制作点击事件只影响父类的 child ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37447933/

相关文章:

javascript - 无法读取空 dropzone 的属性 'removeChild'

javascript - Bootstrap 3 - 折叠时自定义导航栏相对于品牌/ Logo 的位置

php - 通过 jQuery 获取 META 描述

css - 将 div 中的字形居中

javascript - 返回上一页并输入内容

javascript - 如何为类实现 jQuery 前置函数?

javascript - 显示更多代码在 HTML 中无法正常工作

javascript - 使用 jquery 多次更改图像

javascript - AngularJS - 根本不触发/获取 Http 请求

javascript - KNOCKOUT JS observableArray 副本