【问题标题】:jQuery list item icon toggle with child elements带有子元素的 jQuery 列表项图标切换
【发布时间】:2017-11-03 01:52:02
【问题描述】:

我有一个多级侧边栏导航树,在 li 项目中带有很棒的字体图标。我希望图标在展开时从加号变为减号,并在折叠时返回加号。单击一个 li 项不应影响另一个 li 项的状态。

这是我正在使用的 jQuery 脚本:

$('.tree-toggle').click(function () {
        $(this).parent().children('ul.tree').toggle(1);
        $(this).parent().toggleClass('active');
    });

    $('.aside-list li').click(function(){
        $(this).children('label').children('i').toggleClass('fa-plus-square fa-minus-square')
        $(this).children('label').children('i').toggleClass('fa-caret-up fa-caret-down')
    });

这是我的 HTML 结构:

<div class="well">
        <ul class="nav nav-list aside-list">
            <li>
            <label class="tree-toggle nav-header">Category <i class="fa fa-caret-down"></i></label>
                <ul class="nav nav-list tree">
                    <li><label class="tree-toggle nav-header"><i class="fa fa-plus-square"></i> In id sodales leo</label>
                        <ul class="nav nav-list tree">
                            <li><label class="tree-toggle nav-header"><i class="fa fa-plus-square"></i> Tortor masa</label>
                                <ul class="nav nav-list tree">
                                <li><a href="#">Lorem ipsum dolor sit amet</a></li>
                                <li><a href="#">Adipiscing elit</a></li>
                                    <li><label class="tree-toggle nav-header"><i class="fa fa-plus-square"></i> Integro commodo</label>
                                        <ul class="nav nav-list tree">
                                            <li><a href="#">Colors</a></li>
                                            <li><a href="#">Sizes</a></li>
                                        </ul>
                                    </li>
                                </ul>
                            </li>
                        </ul>
                    </li>
                </ul>
            </li>
        </ul><!-- end aside-list -->
    </div><!-- end well -->

目前该功能有问题,因为单击一项会改变列表中所有项的图标状态。

我也为代码制作了一个 JS Fiddle:
https://jsfiddle.net/njm9Lz4e/#&togetherjs=PRGpaib46U

【问题讨论】:

  • 为什么一个元素上有4个不同的图标?如果toggleClass 上没有任何类,则会添加该类。

标签: javascript jquery html css font-awesome


【解决方案1】:

通过打开一个 LI 元素,您可以公开其他 LI 元素。
单击该内部 LI - 单击将传播到导致您的问题的父 LI,因此

防止点击传播到父元素,例如:

$('.aside-list li').click(function(evt) {
   evt.stopPropagation();

jsFiddle example

【讨论】:

    【解决方案2】:

    使用event.target 进行li 点击,效果很好。

    $('.tree-toggle').click(function() {
          $(this).parent().children('ul.tree').toggle(1);
          $(this).parent().toggleClass('active');
        });
    
        $('.aside-list li').click(function(event) {
          $(event.target).children('label').children('i').toggleClass('fa-plus-square fa-minus-square')
          $(event.target).children('label').children('i').toggleClass('fa-caret-up fa-caret-down')
        });
    .tree {
      display: none
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    
    <!-- Optional theme -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
    <!-- Latest compiled and minified JavaScript -->
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
    <div class="well">
            <ul class="nav nav-list aside-list">
                <li>
                <label class="tree-toggle nav-header">Category <i class="fa fa-caret-down"></i></label>
                    <ul class="nav nav-list tree">
                        <li><label class="tree-toggle nav-header"><i class="fa fa-plus-square"></i> In id sodales leo</label>
                            <ul class="nav nav-list tree">
                                <li><label class="tree-toggle nav-header"><i class="fa fa-plus-square"></i> Tortor masa</label>
                                    <ul class="nav nav-list tree">
                                    <li><a href="#">Lorem ipsum dolor sit amet</a></li>
                                    <li><a href="#">Adipiscing elit</a></li>
                                        <li><label class="tree-toggle nav-header"><i class="fa fa-plus-square"></i> Integro commodo</label>
                                            <ul class="nav nav-list tree">
                                                <li><a href="#">Colors</a></li>
                                                <li><a href="#">Sizes</a></li>
                                            </ul>
                                        </li>
                                    </ul>
                                </li>
                            </ul>
                        </li>
                    </ul>
                </li>
            </ul><!-- end aside-list -->
        </div><!-- end well -->

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      • 2016-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多