我正在为一个网站编写一些代码,该网站使用4个列表项来显示/隐藏页面上不同位置的4个不同的div。
以下是我正在做的一个粗略的例子:
<ul>
<li id="first">One</li>
<li id="second">Two</li>
<li id="third">Three</li>
<li id="fourth">Four</li>
</ul>
<div id="one">This is the first div</div>
<div id="two">This is the second div</div>
<div id="three">This is the third div</div>
<div id="four">This is the four div</div>
我有一些丑陋的JS代码正在进行中,而对于我的生活,我不记得/弄清楚如何简化它。
$("#first").click(function() {
$("#one").fadeIn();
$("#two, #three, #four").fadeOut();
});
$("#second").click(function() {
$("#two").fadeIn();
$("#one, #three, #four").fadeOut();
});
$("#third").click(function() {
$("#three").fadeIn();
$("#two, #one, #four").fadeOut();
});
$("#fourth").click(function() {
$("#four").fadeIn();
$("#two, #three, #one").fadeOut();
});
这就是我所需要的,但我知道必须有一种更简单的方法。这是一个工作的JSFiddle - http://jsfiddle.net/claycauley/FBrx5/
如果有人可以帮助我理解为什么/如何简化它也会很好,因为我正在努力学习但却感到难过。
答案 0 :(得分:2)
尝试:
$("li").click(function() {
$("div:visible").fadeOut();
$("div").eq($(this).index()).fadeIn();
});
答案 1 :(得分:1)
在@Petah的帮助下,我提出了这个问题:
$("li").click(function() {
if ($("div").eq($(this).index()).is(":visible")) {
return false;
}
else {
$("div:visible").fadeOut();
$("div").eq($(this).index()).fadeIn();
}
return false;
});
他的解决方案唯一的问题是它仍然在div上激活,即使它已经可见。它会消失,然后再回来。有了这个,我可以阻止它发生。
答案 2 :(得分:0)
如下:
<ul id="linky">
<li id="first">One</li>
<li id="second">Two</li>
<li id="third">Three</li>
<li id="fourth">Four</li>
</ul>
<div class="first">This is the first div</div>
<div class="second">This is the second div</div>
<div class="third">This is the third div</div>
<div class="fourth">This is the four div</div>
$("#linky").on("click", "li", function(e) {
$("div:visible").fadeOut();
$("." + e.target.id).fadeIn();
});