简体   繁体   English

当div折叠并展开时,图标不会更改

[英]Icon does not change when div is collapsed and expanded

Once the button or the "caret-down" icon is clicked, it will expand and the content will be shown. 单击按钮或“插入标记”图标后,它将展开并显示内容。 At the same time, the icon in the button will change to "minus" icon but it doesn't seem to work. 同时,按钮中的图标将变为“减号”图标,但似乎不起作用。 Here's the code. 这是代码。

  $('#demo').on('shown.bs.collapse', function() { var getID = $(this).attr("id"); getID = $("#toggle-" + getID); $(getID).toggleClass("fa-caret-down fa-minus") }); $('#demo').on('hidden.bs.collapse', function() { var getID = $(this).attr("id"); getID = $("#toggle-" + getID); $(getID).toggleClass("fa-minus fa-caret-down"); }); 
 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> <link rel="stylesheet" type="text/css" href="../../css/register-dev.css"> <link rel="stylesheet" href="../../css/activity-registration.css"> <!-- jQuery first, then Tether, then Bootstrap JS. --> <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <div class="container"> <div class="row"> <div class="col"> <button class="btn btn-light btn-lg" type="button" data-toggle="collapse" data-target="#demo">Detail <span><i id="toggle-demo" class="fa fa-caret-down" aria-hidden="true"></i></span> </button> </div> </div> </div> <div id="demo" class="collapse in">Some dummy text in here.</div> 

Since your button isnt a parent of the div you cant use parent() method, and you are doing wrong removing and adding same class at the same line, you also can work with toggleClass() . 由于您的button不是div的父级,因此您不能使用parent()方法,并且在同一行上删除和添加相同的类时出错,因此也可以使用toggleClass() The proper way to do it would be next: 接下来的正确方法是:

 $('#demo').on('shown.bs.collapse', function () { console.log("Opened") $('button[data-target="#demo"] > span > i.fa').toggleClass("fa-caret-down fa-minus") }); $('#demo').on('hidden.bs.collapse', function () { console.log("Closed") $('button[data-target="#demo"] > span > i.fa').toggleClass("fa-minus fa-caret-down") }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet"/> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> <button class="btn btn-light btn-lg" type="button" data-toggle="collapse" data-target="#demo"> Detail <span> <i class="fa fa-caret-down" aria-hidden="true"></i> </span> </button> <div id="demo" class="collapse">Some dummy text in here.</div> 

Note: You also can use next selector in combination with find() method if you prefer: 注意:如果您愿意,还可以将next选择器与find()方法结合使用:

$('button[data-target="#demo"]').find("i.fa").toggleClass("fa-caret-down fa-minus")

Updated Snippet 更新的代码段

I would prefer to do it with IDs . 我更喜欢用IDs来做。 Give an id i tag. i一个ID标签。 I know there are many ways to do. 我知道有很多方法可以做。 But with the solution below. 但是下面的解决方案。 you will get good performance. 您将获得良好的性能。 because it will target the id not scanning the element from DOM 因为它将以不扫描DOM中的元素为目标的id

 $('.collapse').on('shown.bs.collapse', function() { var getID = $(this).attr("id"); getID = $("#toggle-" + getID); $(getID).toggleClass("fa-caret-down fa-minus") }).on('hidden.bs.collapse', function() { var getID = $(this).attr("id"); getID = $("#toggle-" + getID); $(getID).toggleClass("fa-minus fa-caret-down"); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> <div class="container"> <div class="row"> <div class="col"> <button class="btn btn-light btn-lg" type="button" data-toggle="collapse" data-target="#demo">Detail <span><i id="toggle-demo" class="fa fa-caret-down" aria-hidden="true"></i></span> </button> </div> </div> </div> <div id="demo" class="col collapse in">Some dummy text in here.</div> <br> <div class="col"> <button class="btn btn-light btn-lg" type="button" data-toggle="collapse" data-target="#demo2">Detail <span><i id="toggle-demo2" class="fa fa-caret-down" aria-hidden="true"></i></span> </button> </div> <div id="demo2" class="col collapse in">Some dummy text in here.</div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM