あなたの 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>
...4つではなく7つのアイテムのみ。
もしそうなら、これはそれを行います(ライブコピー):
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");
}
});
そこでは、コンテナ内のどこにあるかによって、リストをヘッダーに暗黙的に関連付けています。したがって、最初のものは class="head" で最初のli
ものに関連し、 2 番目のものは 2 番目のものなどに関連しています。div
index
li
div.head
:eq
値ではなく構造的に行うとid
、維持がはるかに簡単になります。ただし、代わりに、関連する divの値をli
持つ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-*
は、仕様への将来の追加と競合することなく、無効な属性を使用するための有効な方法を提供することによって、人々による無効な属性の使用を体系化し、管理しようとする試みです。)