我是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/
谢谢!
答案 0 :(得分: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;
});
和here's a jsFiddle一起玩。
答案 1 :(得分: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();
});
...