使用 jQuery 切换同级元素
我想切换列表中链接的下一个同级链接,
<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>
这是我的 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');
});
css,
ul > li > ul {
display:none;
}
ul > li:hover ul{
display: block;
}
.showme {
display: block;
}
首先,它看起来很好 - 我可以切换目标同级,但为什么在任何父级的第一次切换之后,当我单击/切换当前父级时,有时必须单击两次才能隐藏其他兄弟姐妹?
如果我没有解释清楚的话,这是实时站点, http://lauthiamkok.net/tmp/jquery/toggle/
非常感谢。
I want to toggle the next sibling of a link in a list like this,
<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>
and this is my 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');
});
the css,
ul > li > ul {
display:none;
}
ul > li:hover ul{
display: block;
}
.showme {
display: block;
}
first of all, it seems fine - I can toggle the targeted sibling, but why after the first toggle at any parent, I have to click twice sometime to hide other siblings when I click/ toggle at the current parent?
here is the live site if I am not explaining it clearly,
http://lauthiamkok.net/tmp/jquery/toggle/
Many thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
而不是
.toggle()
函数最终会出现错误声明您可以只使用普通的click
函数并使用.toggleClass()< /code>
相反,像这样:
您可以在这里尝试一下,这对同级执行
.toggleClass()
,然后查找所有其他元素,通过使用
.not()
。这清理了一点,使其变得更容易,它解决的主要问题是不排除
中的同级.removeClass()
,这就是导致您的.toggle()< 的原因/code>
之前的说法是不正确的。
Instead of a
.toggle()
function which is ending up in the wrong state you ca just use a normalclick
function and use.toggleClass()
instead, like this:You can give it a try here, this does a
.toggleClass()
on the sibling, then looks for all other<ul>
elements, by filtering out the sibling with.not()
.This cleans up a bit making it easier, the main issue it resolves is the non-exclusion of the sibling from
.removeClass()
, this is what caused your.toggle()
state to be incorrect before.查看修改后的函数。只需进行一处更改即可正常工作。
See the modified function. Just one change and it will work fine.