lau*_*kok 2 jquery toggle siblings
我想在这样的列表中切换链接的下一个兄弟,
<ul>
<li><a href="#">1</a></li>
<li><a href="#">2</a>
<ul class="selected">
<li><a href="#">2.1</a></li>
<li><a href="#">2.2</a></li>
<li><a href="#">2.3</a></li>
</ul>
</li>
<li><a href="#">3</a></li>
<li><a href="#">4</a>
<ul class="selected">
<li><a href="#">4.1</a></li>
<li><a href="#">4.2</a></li>
<li><a href="#">4.3</a></li>
</ul>
</li>
<li><a href="#">5</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
这是我的jquery,
$(document).ready(function(){
$("a").each(function () {
if ( $(this).siblings().size() > 0)
{
$(this).append("<span class='has-child'>has child</span>");
$(this).toggle(
function (){
$("ul").removeClass("showme");
$(this).siblings(".selected").addClass("showme");
//$(this).next().css({display: "block"});
},
function (){
$(this).siblings(".selected").removeClass("showme");
//$(this).next().css({display: "none"});
});
}
});
$('ul > li > ul > li:last-child > a').css('background','yellow');
});
Run Code Online (Sandbox Code Playgroud)
css,
ul > li > ul {
display:none;
}
ul > li:hover ul{
display: block;
}
.showme {
display: block;
}
Run Code Online (Sandbox Code Playgroud)
首先,它似乎很好 - 我可以切换目标兄弟,但为什么在任何父母的第一次切换之后,我必须点击两次以隐藏其他兄弟姐妹当我点击/切换当前的父母?
如果我没有清楚解释,这里是现场网站, http://lauthiamkok.net/tmp/jquery/toggle/
非常感谢,刘
而不是一个.toggle()最终处于错误状态的函数,你只需使用一个普通的click函数,然后使用.toggleClass(),如下所示:
$(this).click(function (){
var myUL = $(this).siblings(".selected").toggleClass("showme");
$("ul").not(myUL).removeClass("showme");
});
Run Code Online (Sandbox Code Playgroud)
你可以在这里尝试一下,这.toggleClass()对兄弟姐妹做了一个,然后通过过滤出兄弟姐妹来寻找所有其他 <ul>元素.not().
这清理了一下使它变得更容易,它解决的主要问题是不排除兄弟姐妹.removeClass(),这是导致你的.toggle()状态之前不正确的原因.