【问题标题】:How can I optimize this jquery script with else statements?如何使用 else 语句优化这个 jquery 脚本?
【发布时间】:2013-06-13 17:45:21
【问题描述】:

我是 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/

谢谢!

【问题讨论】:

  • 您知道您可以一次选择多个元素吗?例如:$("#features2, #features3, #features4, #features5").hide();
  • 赋予所有元素相同的类。然后就做$('.features').hide();
  • @RocketHazmat 然后还有$(this).show(); 之类的东西

标签: javascript jquery optimization menu navigation


【解决方案1】:

为每个链接元素以及要隐藏/显示的 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;
});

还有here's a jsFiddle 一起玩。

【讨论】:

  • $(this).show(); 没有意义。如果你点击它,它显然是可见的。
  • @RocketHazmat:是的,我在第一次发帖后意识到我过于简化了 OP 的要求。答案现在应该有意义了。
  • 感谢所有帮助!在大家的建议下,我修改了我的代码(现在主要基于 Dan Tao 的回答)。如果有人想查看实现,这里是更新的 jsFiddle。 jsfiddle.net/7PTUu/15
【解决方案2】:

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

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

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

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

【讨论】:

  • 谢谢!我最终使用了 Dan Tao 的解决方案,但这肯定会使我的代码更短。
  • 好的)Dan 的解决方案真的很酷,我的只是code-reducing)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-10
  • 1970-01-01
  • 2011-05-18
相关资源
最近更新 更多