我需要检查嵌套无序列表中的下一个ul是否可见,如果没有显示ul。
我正在使用:
$('#treemenu1 li a').on('click', function(e) {
next("ul").is(':hidden').show(300);
$('#treemenu1 li a').next("ul").is(':visible').hide(300);
});
HTML
<ul id="treemenu1" class="treeview">
<li><a href="#0">Start</a></li>
<li><a href="#1">Are your team:</a></li>
<li class="submenu" id="expandable"><a href="#2">Stakeholder Zen</a>
<ul class="menu">
<li><a href="#3">What is a Stakeholder?</a></li>
<li><a href="#4">Why manage stakeholders?</a></li>
</ul>
</li>
<li class="submenu"><a href="#6">Managing your stakeholders</a>
<ul class="menu">
<li><a href="#7">Use four simple steps</a></li>
<li class="submenu"><a href="#8">Identify your stakeholders</a>
<ul class="menu">
<li><a href="#9">Identification techniques</a></li>
<li><a href="#10">Identification tools</a></li>
</ul>
</li>
</ul>
答案 0 :(得分:1)
您使用is错误。 is
返回true或false,因此您需要将其包装在if块中。
并且您的第一个next
错误
$('#treemenu1 li a').on('click', function(e) {
var $ul = $(this).next("ul");
if ($ul.is(':hidden'))
{
($ul.show(300);
}
var $ul2 = $('#treemenu1 li a').next("ul");
if ($ul2.is(':visible'))
{
$ul2.hide(300);
}
});
或者更好的是,您无需检查它是否已经显示:
$('#treemenu1 li a').on('click', function(e) {
$(this).next("ul").show(300);
$('#treemenu1 li a').next("ul").hide(300);
});
甚至更好(现在你创造了一个小提示,显示你想要它做什么):
$('#treemenu1 li a').click(function(e) {
$(this).next("ul").toggle(300);
});
答案 1 :(得分:0)
试试这个
$(document).ready(function(){
$('#treemenu1 li a').click(function(e) {
$('#treemenu1 li a').next("ul:visible").hide(300);
$(this).next("ul:hidden").show(300);
});
});
<强> JSFIDDLE DEMO 强>
答案 2 :(得分:0)
尝试
var $as = $('#treemenu1 li a').on('click', function(e) {
var $next = $(this).next("ul").toggle(300);
$as.next("ul:visible").not($next).hide(300);
});
演示:Fiddle
或
var $as = $('#treemenu1 li a').on('click', function(e) {
var $next = $(this).next("ul");
$next.filter(':hidden').stop(true, true).show(300);
$as.next("ul:visible").not($next).stop(true, true).hide(300);
});
演示:Fiddle