如果我正确理解您的 HTML 结构,它看起来像这样:
<!-- The list... -->
<ul>
<li>One</li>
<li>Two</li>
<li>Three</li>
<li>Four</li>
</ul>
<!-- The divs -- note I've assumed there's a container... -->
<div id="container">
<div class="head">Header One</div>
<div class="Content">Content One</div>
<div class="head">Header Two</div>
<div class="Content">Content Two</div>
<div class="head">Header Three</div>
<div class="Content">Content Three</div>
<div class="head">Header Four</div>
<div class="Content">Content Four</div>
</div>
...只有七个项目而不是四个。
如果是这样,这将做到(实时副本):
jQuery(function($) {
$(".Content").hide();
$("li").click(function() {
showDivs($("#container div.head:eq(" + $(this).index() + ")"));
});
$(".head").click(function() {
showDivs($(this));
});
function showDivs(head) {
$(".Content").hide();
head.next().fadeIn("slow");
}
});
在那里,我通过它们在容器中的位置隐式地将列表与标题相关联。所以第一个li
与第一个div
与 class="head" 相关,第二个与第二个相关,依此类推。我这样做是通过使用index
知道li
单击了哪个,然后div.head
使用:eq
.
从结构上而不是用id
值来做它更容易维护。但是,或者,您可以通过为每个属性赋予相关 divli
的值来做到这一点:data-div
id
<ul>
<li data-div="h1">One</li>
<li data-div="h2">Two</li>
<li data-div="h3">Three</li>
<li data-div="h4">Four</li>
</ul>
<div id="container">
<div id="h1" class="head">Header One</div>
<div class="Content">Content One</div>
<div id="h2" class="head">Header Two</div>
<div class="Content">Content Two</div>
<div id="h3" class="head">Header Three</div>
<div class="Content">Content Three</div>
<div id="h4" class="head">Header Four</div>
<div class="Content">Content Four</div>
</div>
然后(现场副本):
jQuery(function($) {
$(".Content").hide();
$("li").click(function() {
showDivs($("#" + $(this).attr("data-div")));
});
$(".head").click(function() {
showDivs($(this));
});
function showDivs(head) {
$(".Content").hide();
head.next().fadeIn("slow");
}
});
data-*
属性从 HTML5 开始有效,但所有浏览器现在都支持它们。(data-*
事情是试图编纂和统治人们对无效属性的使用,通过为他们提供一种有效的方式来做到这一点,而不会与未来对规范的补充发生冲突。)