引导程序可折叠嵌套导航jquery应用于多个目标
Bootstrap collapsible nested nav jquery applies to more than one targets
我有一个嵌套的树导航,带有可折叠的(使用Bootstrap 3.0 Collapse)内容,带有默认列表样式的图标。我想在展开折叠区域时更改图标但当我关闭内部塌陷区域时,所有图标都会变回来
我是一个javascript新手,从这篇文章中获得了代码。它在shown.bs.collapse
上将类.icon-right
添加到li
元素,并在hidden.bs.collapse
上将其移除。但它并不仅仅适用于目标元素。
如何将其编辑为仅针对即将关闭的图标?
以下是CodePen上的代码:http://codepen.io/anon/pen/PPyrQg.
HTML
<ul class="ls-nav">
<li id="expand1">
<a role="button" data-toggle="collapse" href="#collapseContent1" aria-expanded="true" aria-controls="collapseContent1">Lorem Ipsum
</a>
<div class="collapse" id="collapseContent1">
<ul class="ls-inner">
<li>Lorem</li>
<li>Lorem</li>
<li>Lorem</li>
<li>Lorem</li>
<li id="expand2">
<a role="button" data-toggle="collapse" href="#collapseContent2" aria-expanded="true" aria-controls="collapseContent2">Lorem Ipsum
</a>
<div class="collapse" id="collapseContent2">
<ul class="ls-inner-dot">
<li class="active">Lorem</li>
<li>Lorem</li>
</ul>
</div>
</li>
<li>Lorem</li>
</ul>
</div>
</li>
<li>Lorem</li>
<li>Lorem</li>
<li>Lorem</li>
</ul>
JS-
$('#collapseContent1').on('shown.bs.collapse', function () {
$("#expand1").addClass("icon-down");
});
$('#collapseContent1').on('hidden.bs.collapse', function () {
$("#expand1").removeClass("icon-down");
});
$('#collapseContent2').on('shown.bs.collapse', function () {
$("#expand2").addClass("icon-down");
});
$('#collapseContent2').on('hidden.bs.collapse', function () {
$("#expand2").removeClass("icon-down");
});
我已经找了两天了,如果有人能帮我,我会很高兴的。
只需将aria-controls
作为类添加到<a>
标记中,然后在expand
唯一ID上切换.icon-down
的class。以下是一个代码为的工作演示
这里有一个演示来说明它是如何工作的:
<ul class="ls-nav">
<li id="expand1" >
<a class="collapseContent1" role="button" data-toggle="collapse" href="#collapseContent1" aria-expanded="true" aria-controls="collapseContent1">Lorem Ipsum
</a>
<div class="collapse" id="collapseContent1">
<ul class="ls-inner">
<li>Lorem</li>
<li>Lorem</li>
<li>Lorem</li>
<li>Lorem</li>
<li id="expand2">
<a class="collapseContent2" role="button" data-toggle="collapse" class="collapseContent2" href="#collapseContent2" aria-expanded="true" aria-controls="collapseContent2">Lorem Ipsum
</a>
<div class="collapse" id="collapseContent2">
<ul class="ls-inner-dot">
<li class="active">Lorem</li>
<li>Lorem</li>
</ul>
</div>
</li>
<li>Lorem</li>
</ul>
</div>
</li>
<li>Lorem</li>
<li>Lorem</li>
<li>Lorem</li>
</ul>
JS:
$('.collapseContent2').on('click', function() {
$("#expand2").toggleClass("icon-down");
});
$('.collapseContent1').on('click', function() {
$("#expand1").toggleClass("icon-down");
});
CODEPEN DEMO
当#collapseContent2
上的事件被触发时,#collapseContent1
上也会触发相同类型的事件,因为#collapseContent2
是#collapseContent1
的一部分。这称为事件冒泡。您可以通过调用jQuerys event.stopPropagation函数来阻止事件在DOM中冒泡。
$('#collapseContent2, #collapseContent1').on('hidden.bs.collapse', function(e) {
e.stopPropagation()
$(this).closest("#expand2").removeClass("icon-down");
});
演示
这也将是一个简单的解决你的问题。
相关文章:
- 将函数的上下文应用于javascript变量
- 将CSS应用于printWindow.print();在Javascript中
- 如何将CSS(特别是填充/边距)应用于select下拉菜单的选项或optgroup
- $scope.apply()何时应用于angular
- Javascript非常简单:'阅读更多''显示较少'应用于Wordpress的功能
- 尝试应用于<tr>在ng单击中
- 如何将javascript仅应用于1个表单中的2个表单提交按钮中的1个
- 将脚本应用于Angular 2上的输入
- Json和$scope的角度之间的差异$eval应用于JSON字符串时
- 如何将参数应用于String.prototype.format函数
- 动态地将过滤器应用于 JSON.parse()
- $location更改不适用于ngchange,而是应用于ngclick
- 如何将 :empty 选择器应用于 XML 文档
- 如何仅在文本字段中有值时才将自定义过滤器应用于 ng-repeat
- 如何使用 JavaScript 将样式应用于 CKEditor 中的选定文本
- MongoDB 无法将$addToSet应用于 Meteor JS 中的非数组
- 将类应用于jquery ui对话框
- 将CSS应用于在JavaScript中创建的表-表的位置不正确
- 如果检查了输入,则将类应用于<身体>,没有jQuery
- 将数据表.js样式应用于 AJAX 加载的表