jQuery导航数组,寻找一个优雅的解决方案

jQuery nav arrays, looking for an elegant solution

本文关键字:一个 解决方案 数组 导航 寻找 jQuery      更新时间:2023-09-26

我一直在想实现以下目标的最优雅的方法。。。

我有以下导航结构:

    <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();
    }
});

我是不是错过了一些显而易见的东西?我觉得这应该比原来简单得多。。。

为什么不直接使用.index()

$('#smenu li').click(function(){
    $('.desc-wrap p').hide().eq($(this).index()).show();
});
$('#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();
  });
});
相关文章: