如何折叠由 div 组成的 jQuery 手风琴菜单?
How to collapse jQuery accordion menu consisting of div's?
我已经看到很多类似的问题,但仍然没有找到解决我问题的方法。
我制作了一个手风琴菜单,菜单中的每个项目都有重复的 jQuery 代码。我想知道是否有更有效的方法来减少 jQuery 代码。
最好不要更改 HTML 标记
$('.what-we-do-toggle1').click(function() {
$('.what-we-do-text1').animate({
height: "toggle",
opacity: "toggle"
}, 200);
$('.what-we-do-text2').slideUp(200);
$('.what-we-do-text3').slideUp(200);
$('.what-we-do-text4').slideUp(200);
$('.what-we-do-text5').slideUp(200);
$('.what-we-do-text6').slideUp(200);
});
$('.what-we-do-toggle2').click(function() {
$('.what-we-do-text2').animate({
height: "toggle",
opacity: "toggle"
}, 200);
$('.what-we-do-text1').slideUp(200);
$('.what-we-do-text3').slideUp(200);
$('.what-we-do-text4').slideUp(200);
$('.what-we-do-text5').slideUp(200);
$('.what-we-do-text6').slideUp(200);
});
$('.what-we-do-toggle3').click(function() {
$('.what-we-do-text3').animate({
height: "toggle",
opacity: "toggle"
}, 200);
$('.what-we-do-text1').slideUp(200);
$('.what-we-do-text2').slideUp(200);
$('.what-we-do-text4').slideUp(200);
$('.what-we-do-text5').slideUp(200);
$('.what-we-do-text6').slideUp(200);
});
$('.what-we-do-toggle4').click(function() {
$('.what-we-do-text4').animate({
height: "toggle",
opacity: "toggle"
}, 200);
$('.what-we-do-text1').slideUp(200);
$('.what-we-do-text2').slideUp(200);
$('.what-we-do-text3').slideUp(200);
$('.what-we-do-text5').slideUp(200);
$('.what-we-do-text6').slideUp(200);
});
$('.what-we-do-toggle5').click(function() {
$('.what-we-do-text5').animate({
height: "toggle",
opacity: "toggle"
}, 200);
$('.what-we-do-text1').slideUp(200);
$('.what-we-do-text2').slideUp(200);
$('.what-we-do-text3').slideUp(200);
$('.what-we-do-text4').slideUp(200);
$('.what-we-do-text6').slideUp(200);
});
$('.what-we-do-toggle6').click(function() {
$('.what-we-do-text6').animate({
height: "toggle",
opacity: "toggle"
}, 200);
$('.what-we-do-text1').slideUp(200);
$('.what-we-do-text2').slideUp(200);
$('.what-we-do-text3').slideUp(200);
$('.what-we-do-text4').slideUp(200);
$('.what-we-do-text5').slideUp(200);
});
不更改标记
$('#what-we-do .row > div').click(function() {
$('#what-we-do .row > div p').stop().slideUp(); // slide all up
$(this).find('p').stop().slideToggle(); // slide this one down
});
像这样:
jQuery(document).ready(function($){
$('#what-we-do .row > div').on('click', function(){
var $this = $(this);
var $content = $this.children('p');
if(!$this.hasClass('toggled'){
$('#what-we-do .row > .toggled > p').slideUp();
$('#what-we-do .row > .toggled').removeClass('toggled');
$this.addClass('toggled');
$content.slideDown();
}else{
$this.removeClass('toggled');
$content.slideUp();
}
});
});
请注意,我还没有测试过它,但它应该可以这样工作。
不改变 html-结构:
$('#what-we-do .container .row div').on('click', function() {
for (var i = 1; i <= 6; i++) {
$(this).find($('.what-we-do-text' + i)).animate({
height: "toggle",
opacity: "toggle"
}, 200);
}
});
我已经看到很多类似的问题,但仍然没有找到解决我问题的方法。
我制作了一个手风琴菜单,菜单中的每个项目都有重复的 jQuery 代码。我想知道是否有更有效的方法来减少 jQuery 代码。
最好不要更改 HTML 标记
$('.what-we-do-toggle1').click(function() {
$('.what-we-do-text1').animate({
height: "toggle",
opacity: "toggle"
}, 200);
$('.what-we-do-text2').slideUp(200);
$('.what-we-do-text3').slideUp(200);
$('.what-we-do-text4').slideUp(200);
$('.what-we-do-text5').slideUp(200);
$('.what-we-do-text6').slideUp(200);
});
$('.what-we-do-toggle2').click(function() {
$('.what-we-do-text2').animate({
height: "toggle",
opacity: "toggle"
}, 200);
$('.what-we-do-text1').slideUp(200);
$('.what-we-do-text3').slideUp(200);
$('.what-we-do-text4').slideUp(200);
$('.what-we-do-text5').slideUp(200);
$('.what-we-do-text6').slideUp(200);
});
$('.what-we-do-toggle3').click(function() {
$('.what-we-do-text3').animate({
height: "toggle",
opacity: "toggle"
}, 200);
$('.what-we-do-text1').slideUp(200);
$('.what-we-do-text2').slideUp(200);
$('.what-we-do-text4').slideUp(200);
$('.what-we-do-text5').slideUp(200);
$('.what-we-do-text6').slideUp(200);
});
$('.what-we-do-toggle4').click(function() {
$('.what-we-do-text4').animate({
height: "toggle",
opacity: "toggle"
}, 200);
$('.what-we-do-text1').slideUp(200);
$('.what-we-do-text2').slideUp(200);
$('.what-we-do-text3').slideUp(200);
$('.what-we-do-text5').slideUp(200);
$('.what-we-do-text6').slideUp(200);
});
$('.what-we-do-toggle5').click(function() {
$('.what-we-do-text5').animate({
height: "toggle",
opacity: "toggle"
}, 200);
$('.what-we-do-text1').slideUp(200);
$('.what-we-do-text2').slideUp(200);
$('.what-we-do-text3').slideUp(200);
$('.what-we-do-text4').slideUp(200);
$('.what-we-do-text6').slideUp(200);
});
$('.what-we-do-toggle6').click(function() {
$('.what-we-do-text6').animate({
height: "toggle",
opacity: "toggle"
}, 200);
$('.what-we-do-text1').slideUp(200);
$('.what-we-do-text2').slideUp(200);
$('.what-we-do-text3').slideUp(200);
$('.what-we-do-text4').slideUp(200);
$('.what-we-do-text5').slideUp(200);
});
不更改标记
$('#what-we-do .row > div').click(function() {
$('#what-we-do .row > div p').stop().slideUp(); // slide all up
$(this).find('p').stop().slideToggle(); // slide this one down
});
像这样:
jQuery(document).ready(function($){
$('#what-we-do .row > div').on('click', function(){
var $this = $(this);
var $content = $this.children('p');
if(!$this.hasClass('toggled'){
$('#what-we-do .row > .toggled > p').slideUp();
$('#what-we-do .row > .toggled').removeClass('toggled');
$this.addClass('toggled');
$content.slideDown();
}else{
$this.removeClass('toggled');
$content.slideUp();
}
});
});
请注意,我还没有测试过它,但它应该可以这样工作。
不改变 html-结构:
$('#what-we-do .container .row div').on('click', function() {
for (var i = 1; i <= 6; i++) {
$(this).find($('.what-we-do-text' + i)).animate({
height: "toggle",
opacity: "toggle"
}, 200);
}
});