【问题标题】:Trying to apply one toggle to multiple divs尝试将一个切换应用于多个 div
【发布时间】:2015-05-16 14:02:20
【问题描述】:

关于这个问题中提供的答案: How to slide down a div then .fadeIn() the content and vice versa?

我提供的 js fiddle 具有专门用于其中一个 div 的 jquery。如果我有多个 div,我如何调整 jquery 代码以调用哪个 div 被单击?我已经修改了代码,但它不起作用:

<a href="#" onclick="toggleSlider();">toggle</a>
<div id="panelThatSlides" style="display:none;background:#eee;padding:10px;">
    <div id="content1Fades" style="opacity:0;filter:alpha(opacity=0);">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ut tortor  erat, et consectetur nisl.
    </div>
</div>
<p></p>
<a href="#" onclick="toggleSlider();">toggle2</a>
<div class="panelThatSlides2" style="display:none;background:#eee;padding:10px;">
    <div id="content2Fades" style="opacity:0;filter:alpha(opacity=0);">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ut tortor  erat, et consectetur nisl.
    </div>
</div>
<p>HELLO WORLD</p>

jquery,我想我是在使用 jquery 来识别“contentthatfades 部分错误:

function toggleSlider() {
    if ($("#"+ this.id).is(":visible")) {
        $("#content"+this.id+"Fades").animate(
            {
                opacity: "0"
            },
            600,
            function(){
                $("#"+ this.id).slideUp();
            }
        );
    }
    else {
        $("#"+ this.id).slideDown(600, function(){
            $("#content"+this.id+"Fades").animate(
                {
                    opacity: "1"
                },
                600
            );
        });
    }   
}

【问题讨论】:

    标签: jquery html css


    【解决方案1】:

    像这样更改html:-

    <a href="#" onclick="toggleSlider(this);">toggle</a>
    <div id="panelThatSlides" style="display:none;background:#eee;padding:10px;">
    <div id="content1Fades" style="opacity:0;filter:alpha(opacity=0);">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ut tortor  erat, et consectetur nisl.
        </div>
     </div>
      <p></p>
       <a href="#" onclick="toggleSlider(this);">toggle2</a>
        <div class="panelThatSlides2" style="display:none;background:#eee;padding:10px;">
        <div id="content2Fades" style="opacity:0;filter:alpha(opacity=0);">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ut tortor  erat, et consectetur nisl.
    </div>
    

    你好世界

    然后是jquery函数:-

       function toggleSlider(el) {
            var dv = $(el).next('div');
            if (dv.is(":visible")) {
               dv.animate(
                    {
                        opacity: "0"
                    },
                    600,
                    function () {
                        dv.slideUp();
                    }
                );
            }
            else {
                dv.slideDown(600, function () {
                    dv.animate(
                        {
                            opacity: "1"
                        },
                        600
                    );
                });
            }
        }
    

    Demo

    【讨论】:

    • 我看到您正在识别下一个 div 并上下滑动它。是否可以使用正则表达式之类的东西来做到这一点?这暂时有效,但如果我碰巧在 2 个 div 之间插入了一个 div,它就会中断。甚至类似于next div that begins with 'bodycontent-'
    • 您可以将类添加到下一个 div 并可以检查`var dv = $(el).next('.className');`
    • Mohit,在第二个父 div 中,class="panelThatSlides2 slide" 怎么会起作用,但是当我将其更改为 class="panelThatSlides2" class="slide" 时它不起作用?
    • bacuse div 只能有一个 class 属性,您可以通过空格分隔多个类,现在您正在传递两个类属性,所以它简单地忽略那个
    • 是的,这行得通。谢谢你。添加event.preventDefault()防止滚动到页面顶部
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多