我是使用jQuery進行編程的新手,並且遇到了自定義jQuery手風琴的麻煩。我試圖擴大手風琴的當前環節並不成功,而且我對如何讓它奏效感到茫然。jQuery Accordion菜單擴展和優化
主要問題:如何讓Section [2]工作(擴展並突出顯示當前活動鏈接)?
我相信這個問題與我如何選擇元素有關。我在該部分中的三行代碼目前是我的最佳選擇。它突出並擴展了全部的鏈接和亮點全部的手風琴標題(h2)。這當然不是我要去做的。我的許多在線搜索都沒有結果,因爲手風琴似乎結構不同,或者我嚴重誤解了一些關鍵概念,因爲沒有一個答案似乎適合這種情況。
第二個問題:如何優化第3部分?代碼本身很簡單,但我重複了幾次,最終導致了下面第[3]節中令人困惑的混亂。
這裏是我當前的jQuery代碼,adapted from this tutorial:
jQuery(document).ready(function() {
// [1] initialize
var parentDivs = $('#nestedAccordion div'),
childDivs = $('#nestedAccordion h3').siblings('div'),
lowDivs = $('#nestedAccordion h4').siblings('div'),
img1 = '...',
img2 = '...';
// [2] expand current link
$('#nestedAccordion a').addClass("a-active");
$('#nestedAccordion a').parents('div').slideDown();
$('#nestedAccordion a').parents('div').find('h2').addClass("open");
// [3] accordion movement (repetitious...)
$('#nestedAccordion h2').click(function() {
parentDivs.slideUp();
$('#nestedAccordion h2').removeClass("open");
$('#nestedAccordion h3').removeClass("open");
$('#nestedAccordion h4').removeClass("open");
$('#nestedAccordion h2').find('img').attr('src', img2);
$('#nestedAccordion h3').find('img').attr('src', img2);
if ($(this).next().is(':hidden')) {
$(this).next().slideDown();
$(this).find('img').attr('src', img1);
$(this).addClass("open");
} else {
$(this).next().slideUp();
$(this).find('img').attr('src', img2);
$(this).removeClass("open");
}
});
$('#nestedAccordion h3').click(function() {
childDivs.slideUp();
$('#nestedAccordion h3').removeClass("open");
$('#nestedAccordion h4').removeClass("open");
$('#nestedAccordion h3').find('img').attr('src', img2);
if ($(this).next().is(':hidden')) {
$(this).next().slideDown();
$(this).find('img').attr('src', img1);
$(this).addClass("open");
} else {
$(this).next().slideUp();
$(this).find('img').attr('src', img2);
$(this).removeClass("open");
}
});
$('#nestedAccordion h4').click(function() {
lowDivs.slideUp();
$('#nestedAccordion h4').removeClass("open");
$('#nestedAccordion h4').find('img').attr('src', img2);
if ($(this).next().is(':hidden')) {
$(this).next().slideDown();
$(this).find('img').attr('src', img1);
$(this).addClass("open");
} else {
$(this).next().slideUp();
$(this).find('img').attr('src', img2);
$(this).removeClass("open");
}
});
});
這裏是Accordion HTML結構。每個級別都有一個div,以便jQuery slideUp和slideDown函數可以工作 - div展開和摺疊。
<div id="nestedAccordion">
<h2>Top-level Heading</h2>
<div>
<h3>Mid-level Heading</h3>
<div>
<h4>Bottom-level Heading</h4>
<div>
<ol>
<li>Link</li>
</ol>
</div>
</div>
</div>
</div>
感謝您的快速回復。我試着用你提供的代碼jsfiddle,但似乎無法讓它工作。關於使用'$'而不是'jQuery'的好處 - 我在文章中對它進行了編輯。這是我的jsfiddle嘗試:[鏈接](http://jsfiddle.net/Turgon/JFm35/2) – Turgon
@Turgon我更新了你的jsfiddle了一下。 Jsfiddle會自動加載你的javascript,因此你不需要'$(document).ready'來包圍它。 – user3334690
啊,我在想這是否是必要的,謝謝。我如何查看更新的jsfiddle?我嘗試將網址的末尾編輯爲/ 3 /,4,5等,但它只是出現了'404找不到'。我在上面更新過的帖子中發佈了最新的更新信息/ 6 /。子公司似乎沒有像我預期的那樣工作?非常感謝您的幫助 - 我很感激! – Turgon