如果我正確理解你的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>
。只有七項而不是四項。
如果是這樣,這將做到這一點(live copy):
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
被點擊,然後使用:eq
查找相關的div.head
。
從結構上而不是使用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>
然後(live copy):
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-*
attributes是作爲有效的交替,不過,你可以通過給每個li
一個data-div
屬性與相關div的id
的價值做HTML5,但所有瀏覽器都支持它們。 (該data-*
事情是編纂和統治人們的使用無效的屬性,給他們一個有效的方式做到這一點,而不與將來增加的規範衝突的企圖。)
請您更改用戶名的東西有用嗎?事實上,我相當確定沒有人可以通過'@'符號特別針對你的評論...(你會收到* this *通知,因爲我在評論你的問題。) –
can you引用你的HTML? 'div'和列表。 –
我在這裏發佈了http://jsfiddle.net/DTcGD/24/ – Tester