我一直在努力想出最优雅的方式来实现以下目标......
我有以下导航结构:
<div class="menu-wrap">
<ul id="smenu">
<li><a class="selected" href="#">1</a></li>
<li><a class="" href="#">2</a></li>
<li><a class="" href="#">3</a></li>
<li><a class="" href="#">4</a></li>
<li><a class="" href="#">5</a></li>
<li><a class="" href="#">6</a></li>
<li><a class="" href="#">7</a></li>
</ul>
</div>
这个div在页面的其他地方:
<div class="desc-wrap">
<p>blah blah blah</p>
<p>blah blah blah</p>
<p>blah blah blah</p>
<p>blah blah blah</p>
<p>blah blah blah</p>
<p>blah blah blah</p>
<p>blah blah blah</p>
</div>
p默认隐藏;如果我点击第一个li,我想要第一个p出现,等等。简单吧?我已经通过几种不同的方式工作了,但我一直认为我应该能够用更少的线来完成它。
这是我的超级跛脚,添加了类名:
$("#smenu li").click(function() {
$(".desc-wrap p").hide();
});
$("li.desc-one").click(function() {
$("p.desc-one").show();
});
$("li.desc-two").click(function() {
$("p.desc-two").show();
});
$("li.desc-three").click(function() {
$("p.desc-three").show();
});
$("li.desc-four").click(function() {
$("p.desc-four").show();
});
$("li.desc-five").click(function() {
$("p.desc-five").show();
});
$("li.desc-six").click(function() {
$("p.desc-six").show();
});
$("li.desc-seven").click(function() {
$("p.desc-seven").show();
});
这是我的阵列尝试的开始,但你可以看到它的发展方向:
var mappedPs = $(".desc-wrap p").map(function (index) {
if (index == 0) {
$(this).show();
}
else {
$(this).hide();
}
});
var mappedList = $("#smenu li").map(function (index) {
if (index == 0) {
$("#smenu li").click(function() {
$(mappedPs[0]).show();
});
}
else {
$(mappedPs[1,2,3,4,5,6]).hide();
}
});
我错过了一些明显的东西吗?我觉得这应该比结果要简单得多......
答案 0 :(得分:4)
为什么不使用.index()
?
$('#smenu li').click(function(){
$('.desc-wrap p').hide().eq($(this).index()).show();
});
答案 1 :(得分:2)
$('#smenu li').each(function(index) {
$(this).click(function() {
$('.desc-wrap p:eq('+index+')').show();
});
});
OR(这将隐藏任何可见的段落标记)
$('#smenu li').each(function(index) {
$(this).click(function() {
$('.desc-wrap p').hide().filter(':eq('+index+')').show();
});
});