Jquery SlideToggle() - 只切换某些项目

标签 jquery function toggle slidetoggle

我有一个页面,其中有一些问题,答案隐藏在问题下面。当有人点击问题时,答案就会向下滑动(这是一个单独的功能,效果很好)。再次单击时,它将返回到隐藏状态。

我遇到的问题是一个单独的链接#expand-close a,单击该链接时,将打开/关闭问题的所有答案。

当答案已经打开时,此函数将运行并打开所有已关闭的答案,但会关闭所有打开的答案。

我希望它打开所有并保持打开的答案打开,并关闭所有并保持关闭的答案关闭。

$('#expand-close a').click(function () {

        $(this).toggleClass("hide");

        $('.faq-hideable').slideToggle(500);
        $('.faq-hideable').closest('li').find('h2').toggleClass('p-open');

    });

最佳答案

对于添加/删除类,这很简单,因为 toggleClass()有一个可选的 switch 参数,用于确定是否应添加或删除该类(而不是简单地切换它)。

.slideToggle() 没有这样的工具,因此我们使用基本的 if/else 子句手动执行此操作,以在 slideUp()slideDown 之间进行选择()

$('#expand-close a').click(function () {
    var tohide = $(this).toggleClass("hide").hasClass("hide");

    if (tohide) {
        $('.faq-hideable').slideUp(500);
    } else {
        $('.faq-hideable').slideDown(500);
    }
    $('.faq-hideable').closest('li').find('h2').toggleClass('p-open', !tohide);

});
<小时/>

如果您想要更简洁的内容(但可读性较差):

$('#expand-close a').click(function () {
    var tohide = $(this).toggleClass("hide").hasClass("hide");
    $('.faq-hideable')[tohide ? "slideUp" : "slideDown"](500)
        .closest('li').find('h2').toggleClass('p-open', !tohide);
});

关于Jquery SlideToggle() - 只切换某些项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8448422/

相关文章:

php - 将数据从 ajax 传递到 laravel 5.1 Controller 以保存到 mysql?

javascript - img 调整大小,但宽度将停止在 600

mysql - 如何执行MySQL函数而不显示结果

jquery slidedown 和 slideup 摆动 div

html - 移动导航切换 html/css

javascript - jQuery,在表中单击超链接值时将其从一个单元格复制到同一行中的另一个单元格

jquery - 如何在鼠标单击时重复旋转变换?

c - 传递指向函数的指针

jQuery 顺序函数

javascript - jQuery 不会切换 css 属性?