【问题标题】:Simple accordion menu (jQuery)简单的手风琴菜单(jQuery)
【发布时间】:2010-03-18 09:03:49
【问题描述】:

jQuery:

// ACCORDION
$('.accordion .answer').hide(); // hide all
$('.accordion .question').click(function(){
     $('.accordion .answer').slideUp(); // hide all open
     $(this).addClass('active').next().slideDown(); // show the anwser
     return false;
});

HTML:

<dl class="accordion">
    <dt class="question">question</dt>
    <dd class="answer">answer</dd>
    <dt class="question">question</dt>
    <dd class="answer">answer</dd>
</dl>

... 有效,但是

  • 必须从非活动问题元素中删除“活动”类&
  • 至少有一个答案保持打开状态;所有答案都应该能够关闭。

谢谢!

【问题讨论】:

  • 不想为小部件和动画加载 50+ kb 的 js,只需要一个基本的手风琴。
  • Accordion 及其依赖项的大小为 15kb(忽略 jQuery 本身,因为无论如何您都在使用它),而不是 50。
  • 好的,但如果我只需要一个简单的手风琴,15kb 仍然很多。反正我想通了。

标签: javascript jquery css menu


【解决方案1】:

好的,想通了:

$('.accordion .answer').hide(); // hide all
$(".accordion .question").click(function () {
    $(this).toggleClass('active').next(".answer").slideToggle(300).siblings(".answer").slideUp("slow");
    $(this).siblings().removeClass('active');
});

【讨论】:

    【解决方案2】:
    $('.accordion .answer').hide(); // hide all
    $('.accordion .question').click(function(){
        if($(this).hasClass('active')) {
            $(this).removeClass('active').next().slideUp();
        } else {
            $('.accordion .answer').removeClass('active').slideUp();
            $(this).addClass('active').next().slideDown();
        }
        return false;
    });
    

    但你真的应该看看jQuery UI Accordion

    【讨论】:

    • 几乎可以工作!但是 1)它允许打开多个答案和 2)如果您先打开然后再打开第二个,都保留“活动”类。
    • 你说得对,一个小错误(忘记了一个点(.))和我的想法的一个缺陷(忘记滑动不活动)。现在应该工作,但我看到你自己想通了。 :)
    猜你喜欢
    • 2011-05-01
    • 2012-12-23
    • 2023-01-29
    • 2014-03-31
    • 2023-03-04
    • 2013-02-03
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多