小提琴:http://jsfiddle.net/34ng9sto/14/
JQuery的:
$(function () {
$(".uSPInner").hide();
//modify the "hover" to "click" and merge with thesecond "click" function. SlideToggle only if a child UL exist within the parent UL
$(".clickMe").closest("li").hover(function () {
$(this).closest("li").find("ul").slideDown();
}, function () {
$(this).closest("li").find("ul").slideUp();
});
$('.clickMe').click(function () {
alert("outer clicked");
$('.clickMe').removeAttr('id');
$(this).attr('id', 'current');
$('.dispArtBody').addClass('hideContent');
var element = $(this).attr("data-toggle");
$(element).removeClass('hideContent');
});
$('.uSPInner').click(function () { //if the inner LI is clicked, set the inner clicked LI ID to "current" and also the parent LI ID to "current"
alert("inner clicked");
});
$('.uSPStyle li a').filter(function () {
return $.trim($(this).html()) == '';
}).parent().hide();
$('.uSPInner li a').filter(function () {
return $.trim($(this).html()) == '';
}).parent().hide();
});
我期待的是
答案 0 :(得分:2)
可能有一个更好的解决方案,但对于momen,这可以帮助你:
$('.clickMe').click(function () {
var $this = $(this);
$this.closest("li").find("ul").slideToggle();
$('.clickMe').removeClass('current');
$this.addClass('current');
$this.parents('.uSPInner').siblings('.clickMe').addClass('current');
});
只需使用点击事件中的slideToggle()
- 函数,而不是悬停函数的输入和输出处理程序。
注意:我将ID current
更改为某个类,因为当您要将其应用于多个元素时,必须记住该ID必须在文档中是唯一的。
<强> Demo 强>
Additon:
我建议将班级uSPInner
设置为
.uSPInner{
display: none;
}
而不是在页面加载时通过jQuery隐藏它。
答案 1 :(得分:1)
您必须选择li
元素并使用a
函数在打开和关闭状态之间切换,而不是定位slideToggle()
元素:
$(function () {
$(".uSPInner").hide();
$(".clickMe").click(function () {
$(this).closest("li").find("ul").slideToggle();
});
$('.uSPStyle li a').filter(function () {
return $.trim($(this).html()) == '';
}).parent().hide();
$('.uSPInner li a').filter(function () {
return $.trim($(this).html()) == '';
}).parent().hide();
});