0

我是 javascript 新手,我正在尝试编写一个垂直菜单。我现在让它工作,这样当您单击列表项时,它会更改 div 的内容。问题是,我知道我编写的 javascript 根本没有优化。

例如,如果我想向列表中添加另一个项目,则需要在现有脚本中添加大量代码。如果有人能给我一些关于使用某种 case/switch 或 if/else 框架的指导,这些框架可以用更少的代码做同样的事情,那就太好了。我尝试了一些不同的东西,但没有一个能像我想要的那样工作。

这是我现在正在做的事情的一部分。div #2-5 在加载时隐藏,每个列表项都有一个单击功能,可以单独切换隐藏或显示其他 div。

$(document).ready(function(){
$('#feature2').hide();
$('#feature3').hide();
$('#feature4').hide();
$('#feature5').hide();

$('.feature1').click(function(){ 
$('#feature2').hide();
$('#feature3').hide();
$('#feature4').hide();
$('#feature5').hide();
$('#feature1').show();
});
$('.feature2').click(function(){ 
$('#feature1').hide();
$('#feature3').hide();
$('#feature4').hide();
$('#feature5').hide();
$('#feature2').show();
}); 
etc.

这是带有我要优化的代码的 jsFiddle:http: //jsfiddle.net/7PTUu/10/

谢谢!

4

2 回答 2

4

为每个链接元素以及要隐藏/显示的 div 提供一个通用 CSS 类(例如,“feature-link”、“feature”)。然后将href每个链接的属性设置为它应该显示或隐藏的元素的 ID。通过这种方式,您可以使用一个简单的处理程序完成所有这些工作。

示例 HTML:

<!-- in your vertical menu -->
<a class="feature-link" href="#feature1">Feature 1</a>
<a class="feature-link" href="#feature2">Feature 2</a>

<!-- the features you want to show/hide -->
<div class="feature" id="feature1">...</div>
<div class="feature" id="feature2">...</div>

示例 JavaScript:

// Same logic applies to all links.
$(".feature-link").click(function() {

  // Get the feature we want to show.
  var target = $(this).attr("href");

  // Hide all other feature elements
  $(".feature").hide();

  // Show just the one div.
  $(target).show();

  // This is personal preference; I put this here to prevent the ID
  // from being appended to the URL in the browser's address bar.
  return false;
});

这是一个可以玩的jsFiddle 。

于 2013-06-13T17:53:38.530 回答
3

最快的解决方案(但不是最佳的):

$(document).ready(function() {
    function hideDivs() {
        $('#feature1, #feature2, #feature3, #feature4, #feature5').hide();
    }
    hideDivs();

    $('.feature1').click(function(){ 
        hideDivs();
        $('#feature1').show();
    });

    $('.feature2').click(function(){ 
        hideDivs();
        $('#feature2').show();
    }); 
    ...
于 2013-06-13T17:50:55.380 回答