在 jquery 手风琴中点击另一个 li 时自动关闭 li
auto closing li when cliclking another li in a jquery accordion
我正在制作这个里面有 ul li 的手风琴 li.I 希望在单击单个 li.So 时自动关闭所有打开的 li ,到目前为止我已经解决了 this.The 问题当我单击一个 li 时,我必须再次单击它以关闭它才能打开另一个 one.I 只想在打开另一个 li 之前自动关闭每个打开的 li one.Don 不知道该怎么做 it.please 有人帮我做这个...
HTML代码
<div class="main-menu">
<ul class="1st_menu">
<li><a href="#"><span>D'MAIRE ACCOUNT</span></a>
<ul class="sub-menu" id="info_list1">
<li class="has_par"><a href="#" class="show_par icon_plus">Widgets</a>
<p style="display:none" class="par_desc">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor</p>
</li>
<li class="has_par"><a href="#" class="show_par icon_plus">Menus</a>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod t</p>
</li>
<li class="has_par"><a href="#" class="show_par icon_plus">Products</a>
<p>quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat</p>
</li>
</ul>
</li>
</ul>
</div>
jquery代码
$(document).ready(function(){
var $li_p = $('ul[class="sub-menu"] li').children('p');
var $li_a = $('ul[class="sub-menu"] li').children('a');
if($li_p.slideToggle().toggleClass('closed')){
$li_p.hide();
}
$('ul[class="sub-menu"] li').click(function() {
var ullist = $(this).children('p:first');
ullist.slideToggle().toggleClass('closed');
var isVisible = ullist.is(".closed");
var img_icon = $(this).children('a');
if (isVisible === true){
img_icon.removeClass('icon_minus').addClass('icon_plus');
} else {
img_icon.removeClass('icon_plus').addClass('icon_minus');
}
});
});
用 .not(this) 排除当前元素
尝试这样的事情:
$('ul[class="sub-menu"] li').click(function() {
$(this).parent().find('.li').not(this).addClass('closed');
$(this).toggleClass('closed');
}
您可以使用jquery siblings 方法抓取所有相邻的 li 标签,然后循环检查它们是否打开。如果它们是打开的,您可以关闭它们并删除减号 class 并添加加号 class.
var siblings = $(this).siblings('li');
$.each(siblings, function (i, key) {
if ($(key).find('a').hasClass('icon_minus')) {
var sibling = $(key).children('p:first');
$(sibling).slideToggle().addClass('closed');
$(key).find('a').removeClass('icon_minus').addClass('icon_plus');
}
});
工作 JSFiddle:http://jsfiddle.net/086zuboc/
我正在制作这个里面有 ul li 的手风琴 li.I 希望在单击单个 li.So 时自动关闭所有打开的 li ,到目前为止我已经解决了 this.The 问题当我单击一个 li 时,我必须再次单击它以关闭它才能打开另一个 one.I 只想在打开另一个 li 之前自动关闭每个打开的 li one.Don 不知道该怎么做 it.please 有人帮我做这个...
HTML代码
<div class="main-menu">
<ul class="1st_menu">
<li><a href="#"><span>D'MAIRE ACCOUNT</span></a>
<ul class="sub-menu" id="info_list1">
<li class="has_par"><a href="#" class="show_par icon_plus">Widgets</a>
<p style="display:none" class="par_desc">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor</p>
</li>
<li class="has_par"><a href="#" class="show_par icon_plus">Menus</a>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod t</p>
</li>
<li class="has_par"><a href="#" class="show_par icon_plus">Products</a>
<p>quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat</p>
</li>
</ul>
</li>
</ul>
</div>
jquery代码
$(document).ready(function(){
var $li_p = $('ul[class="sub-menu"] li').children('p');
var $li_a = $('ul[class="sub-menu"] li').children('a');
if($li_p.slideToggle().toggleClass('closed')){
$li_p.hide();
}
$('ul[class="sub-menu"] li').click(function() {
var ullist = $(this).children('p:first');
ullist.slideToggle().toggleClass('closed');
var isVisible = ullist.is(".closed");
var img_icon = $(this).children('a');
if (isVisible === true){
img_icon.removeClass('icon_minus').addClass('icon_plus');
} else {
img_icon.removeClass('icon_plus').addClass('icon_minus');
}
});
});
用 .not(this) 排除当前元素
尝试这样的事情:
$('ul[class="sub-menu"] li').click(function() {
$(this).parent().find('.li').not(this).addClass('closed');
$(this).toggleClass('closed');
}
您可以使用jquery siblings 方法抓取所有相邻的 li 标签,然后循环检查它们是否打开。如果它们是打开的,您可以关闭它们并删除减号 class 并添加加号 class.
var siblings = $(this).siblings('li');
$.each(siblings, function (i, key) {
if ($(key).find('a').hasClass('icon_minus')) {
var sibling = $(key).children('p:first');
$(sibling).slideToggle().addClass('closed');
$(key).find('a').removeClass('icon_minus').addClass('icon_plus');
}
});
工作 JSFiddle:http://jsfiddle.net/086zuboc/