Bootstrap Knockout foreach 循环中的 4 个手风琴,expanded/collapse 问题时更改图标
Bootstrap 4 accordions inside Knockout foreach loop, change icon when expanded/collapse issue
我在父手风琴中有一个手风琴列表,例如:
<div id="parentAccordion" class="card-accordion">
<div class="card">
<div class="card-header bg-black text-white pointer-cursor">
<div class="row">
<div style="font-size:16px">Custom - <span data-bind="text:$root.nameSelected"></span></div>
</div>
</div>
<div id="parentBody" class="collapse show" data-parent="#parentAccordion" style="background-color: #d9e0e7">
<!-- begin #accordion -->
<div id="oAccordion" class="card-accordion">
<!-- begin card -->
<div class="card" data-bind="foreach:$root.fbolist">
<div style="padding: 3px">
<div class="card-header bg-black text-white pointer-cursor" data-toggle="collapse" data-bind="attr: { href: '#O'+CourseId(), title: cName }">
<i class="fa fa-caret-right"></i>
<span data-bind="text:cName">NAME</span>
</div>
<div class="collapse" data-bind="attr:{'id':'O'+CourseId()}" data-parent="#oBody">
<div class="card-body white text-justify">
<!-- body here -->
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
我正在尝试更改图标,当展开到插入符向下和折叠到插入符右时。一次只能展开子列表 (fbolist) 中的一个手风琴,折叠其他的。
我用这个js来改变图标:
$('.collapse').on('shown.bs.collapse', function () {
$(this).parent().find(".fa-caret-right").removeClass("fa-caret-right").addClass("fa-caret-down");
}).on('hidden.bs.collapse', function () {
$(this).parent().find(".fa-caret-down").removeClass("fa-caret-down").addClass("fa-caret-right");
});
但它更改了 Knockout foreach 中其余手风琴的所有图标。
有没有一种方法可以在只有一个扩展时不将所有图标更改为插入符号?它应该只有展开后的那个图标,其他的右插入符号[=14=]
$('.collapse').on('click',".pointer-cursor", function () {
$(this).find(".fa-caret-right").removeClass("fa-caret-right").addClass("fa-caret-down");
$(this).parents(".card").siblings().find(".fa-caret-down").attr("class", " fas fa-caret-right");
});
您可以创建自定义绑定处理程序以仅针对 collapsing/expanding 元素:
ko.bindingHandlers['collapse'] = {
init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
$(element).on('shown.bs.collapse', function () {
$(element).parent().find(".fa-caret-right").removeClass("fa-caret-right").addClass("fa-caret-down");
}).on('hidden.bs.collapse', function () {
$(element).parent().find(".fa-caret-down").removeClass("fa-caret-down").addClass("fa-caret-right");
});
}
};
然后应用到具有 collapse
类 的元素。
<div class="collapse" data-bind="attr:{'id':'O'+CourseId()}, collapse" data-parent="#oBody">
<div class="card-body white text-justify">
<!-- body here -->
</div>
</div>
我在父手风琴中有一个手风琴列表,例如:
<div id="parentAccordion" class="card-accordion">
<div class="card">
<div class="card-header bg-black text-white pointer-cursor">
<div class="row">
<div style="font-size:16px">Custom - <span data-bind="text:$root.nameSelected"></span></div>
</div>
</div>
<div id="parentBody" class="collapse show" data-parent="#parentAccordion" style="background-color: #d9e0e7">
<!-- begin #accordion -->
<div id="oAccordion" class="card-accordion">
<!-- begin card -->
<div class="card" data-bind="foreach:$root.fbolist">
<div style="padding: 3px">
<div class="card-header bg-black text-white pointer-cursor" data-toggle="collapse" data-bind="attr: { href: '#O'+CourseId(), title: cName }">
<i class="fa fa-caret-right"></i>
<span data-bind="text:cName">NAME</span>
</div>
<div class="collapse" data-bind="attr:{'id':'O'+CourseId()}" data-parent="#oBody">
<div class="card-body white text-justify">
<!-- body here -->
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
我正在尝试更改图标,当展开到插入符向下和折叠到插入符右时。一次只能展开子列表 (fbolist) 中的一个手风琴,折叠其他的。 我用这个js来改变图标:
$('.collapse').on('shown.bs.collapse', function () {
$(this).parent().find(".fa-caret-right").removeClass("fa-caret-right").addClass("fa-caret-down");
}).on('hidden.bs.collapse', function () {
$(this).parent().find(".fa-caret-down").removeClass("fa-caret-down").addClass("fa-caret-right");
});
但它更改了 Knockout foreach 中其余手风琴的所有图标。 有没有一种方法可以在只有一个扩展时不将所有图标更改为插入符号?它应该只有展开后的那个图标,其他的右插入符号[=14=]
$('.collapse').on('click',".pointer-cursor", function () {
$(this).find(".fa-caret-right").removeClass("fa-caret-right").addClass("fa-caret-down");
$(this).parents(".card").siblings().find(".fa-caret-down").attr("class", " fas fa-caret-right");
});
您可以创建自定义绑定处理程序以仅针对 collapsing/expanding 元素:
ko.bindingHandlers['collapse'] = {
init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
$(element).on('shown.bs.collapse', function () {
$(element).parent().find(".fa-caret-right").removeClass("fa-caret-right").addClass("fa-caret-down");
}).on('hidden.bs.collapse', function () {
$(element).parent().find(".fa-caret-down").removeClass("fa-caret-down").addClass("fa-caret-right");
});
}
};
然后应用到具有 collapse
类 的元素。
<div class="collapse" data-bind="attr:{'id':'O'+CourseId()}, collapse" data-parent="#oBody">
<div class="card-body white text-justify">
<!-- body here -->
</div>
</div>