我使用bootstrap 4 alpha 6版本。在我的页面中,我有几个崩溃块。我想在用户打开/关闭该块时更改图标。因为我有几个这样的块我使用了类,但它没有用。我做错了什么?附:当我在JS中使用id工作正常,但正如你所看到我有几个崩溃块并且不想" copy&粘贴"
HTML:
<div class="card">
<div class="card-header">
<div class="d-flex align-items-center justify-content-between">
<button data-toggle="collapse" data-target="#collapse-projects" aria-expanded="false" aria-controls="collapse-projects">
<i class="fa fa-eye" aria-hidden="true"></i>
</button>
</div>
</div>
<div class="card-block">
<div class="collapse" id="collapse-projects">
***SOME CONTENT***
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<div class="d-flex align-items-center justify-content-between">
<button data-toggle="collapse" data-target="#collapse-tasks" aria-expanded="false" aria-controls="collapse-tasks">
<i class="fa fa-eye" aria-hidden="true"></i>
</button>
</div>
</div>
<div class="card-block">
<div class="collapse" id="collapse-tasks">
***SOME CONTENT***
</div>
</div>
</div>
JS:
$(document).ready(function () {
$('.collapse')
.on('shown.bs.collapse', function() {
$(this)
.parent()
.find(".fa-eye")
.removeClass("fa-eye")
.addClass("fa-eye-slash");
})
.on('hidden.bs.collapse', function() {
$(this)
.parent()
.find(".fa-eye-slash")
.removeClass("fa-eye-slash")
.addClass("fa-eye");
});
});
答案 0 :(得分:5)
问题是:您的所有button
和.collapse
元素都处于相同的DOM级别,这意味着.collapse
shown.bs.collapse
或{{1}触发事件时,事件处理程序中的hidden.bs.collapse
指向$(this).parent()
的父级 - 代码中未显示的最外部的父级。我们将其设为.collapse
。然后,当您在OUTER
上调用find
,removeClass
和addClass
时,所有图标都会被更改,这就是为什么&#34;它没有工作&# 34。
要解决此问题,您需要创建一个包含一组OUTER
和button
元素的单元包装器。这样,.collapse
将指向该组,并且只更改了单击的按钮图标。
我已为此修复程序jsfiddle,请检查。