使用jquery更改/中的元素/类
Change elements/classes in/with jquery
我是jQuery新手,现在用它来做导航,在移动设备或小视图中滑动。这工作得很好,但我使用一个加号图标来打开子菜单,当子菜单打开时,它会变成一个减号图标。
但是当子菜单关闭时,它不会变回加号图标。
代码如下:
$(document).ready(function() {
$('<span class="menu-expander"><span class="plusicon horizontal"></span><span class="plusicon vertical"></span></span>').insertAfter('.level_2');
$('#menu-toggle').click(function() {
$(this).next('#navigation-main').slideToggle();
});
$('.menu-expander').click(function() {
$(this).prev('.level_2').slideToggle();
$(this).children('span.plusicon.vertical').toggleClass('plusicon vertical');
});
});
我认为"有趣"的部分可能是第二个功能,第一个仍然是一个汉堡包图标,打开导航,那工作(好吧,它不显示滑动动画,第二个做什么…不知道,为什么它不工作…)。
第二部分是加号。当我点击加号时,子菜单滑进来,加号变成减号,但当我点击减号时,它不会变回加号。
有谁知道为什么它不工作或可以解释我,我怎么做它的工作?
问候,马库斯
问题是,您的选择器试图找到plusicon
和vertical
类的span
,但在第一次调用此:
$(this).children('span.plusicon.vertical').toggleClass('plusicon vertical');
删除所述类,它无法找到您的目标span
。
iconId
在下一个例子中)或另一个类,这样它就可以总是被找到
$('<span class="menu-expander"><span id="iconId" class="plusicon horizontal"></span><span class="plusicon vertical"></span></span>').insertAfter('.level_2');
...
$('.menu-expander').click(function() {
$(this).prev('.level_2').slideToggle();
$(this).children('#iconId').toggleClass('plusicon vertical');
});
这样做:
$('.menu-expander').click(function() {
$(this).prev('.level_2').slideToggle();
var $icon = $(this).children('#ID OF ELEMENT'); // Would be easier to add an ID to your element whcih you want to alter - limits the error possibilties :)
if($icon.hasClass("CLASS YOU WANT TO GET RID OF"){
$icon.removeClass("CLASS YOU WANT TO GET RID OF");
$icon.addClass("THE CLASS YOU NEED");
else{
$icon.addClass("THE CLASS YOU WANT TO ADD");
}
});
我现在在工作,所以请原谅任何打字错误。您基本上需要检查将图标更改为减号的类是否仍然处于活动状态-如果是,则将其更改回来。
希望对你有帮助。
点:
- 最好切换1类来显示隐藏元素,例如"show";
- 使用js代码插入的元素最好使用.on()(将来);
$(document).ready(function() {
$('<span class="menu-expander"><span class="plusicon horizontal">horizontal</span><span class="plusicon vertical show">vertical</span></span>').insertAfter('.level_2');
$('#menu-toggle').click(function() {
$('#navigation-main').slideToggle();
});
$('.menu-expander').click(function() {
$(this).prev('.level_2').slideToggle();
$(this).find('.plusicon').toggleClass('show');
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<style>
.plusicon {display:none}
.show {display:block!important}
</style>
<ul>
<li id="menu-toggle" class="level_2">Toggle</li>
</ul>
<ul id="navigation-main">
<li>test</li>
</ul>
相关文章:
- AngularJS - 如何在 iframe 元素更改时读取 SRC 属性
- Jquery 子元素更改
- 当其他元素更改类时显示/隐藏元素 - jQuery
- 主干.js - 模型数组上的更改事件不会在元素更改时触发
- 如何从 HTML 元素更改特定的内联样式
- 从级联 SELECT 元素更改事件调用外部 JS 函数
- 只有JavaScript和CSS的元素更改设备
- DOM 元素更改在 JavaScript 代码中不可见
- 如何从 iframe 元素更改元素属性
- 使用javascript使元素更改其自己的内容
- 如何根据光标移动到*的元素更改jQuery .mouseleave()的行为
- AngularJS在父元素更改时更新子组件
- 对不考虑元素更改的 Angular 指令进行单元测试
- 等待元素更改其值(文本)
- 根据单击的元素更改变量
- 如何在Javascript中监视UL元素上的元素更改
- 如何在这个jquerylib中向onlick事件添加css元素更改
- 通过两个类选择元素,并仅为该特定元素更改其css属性
- 如何根据数组AngularJS中的元素更改href
- 使用外部文件元素更改类