javascript - jQuery Accordion - 将选定的一个向上移动

标签 javascript jquery html

伙计们,我正在使用 slide 函数做一个 jQuery Accordion 类的东西。它工作正常,但我将其用于一个项目,该项目需要我将选定的项目向上或第一个移动。

这是我的 HTML 和 jQuery

<ul class="inneraccordion">
            <li>                    
                <a href="#" class="open">
                    <div class="acc_head row">
                        <div class="col-md-1 col-sm-1 col-xs-2 icon-divider"><div class="icon-l_offers"></div></div>
                        <div class="col-md-11 col-sm-11 col-xs-10 acc_head_text">Offers (3)</div>
                    </div>
                </a>

                <div class="inneraccordionbox">
                    Content
                </div>                       
            </li>

            <li>                    
                <a href="#" class="open">
                    <div class="acc_head row">
                        <div class="col-md-1 col-sm-1 col-xs-2 icon-divider"><div class="icon-l_play"></div></div>
                        <div class="col-md-11 col-sm-11 col-xs-10 acc_head_text">Set Top Box</div>
                    </div>
                </a>

                <div class="inneraccordionbox">
                    Content
                </div>                       
            </li>

            <li>                    
                <a href="#" class="open">
                    <div class="acc_head row">
                        <div class="col-md-1 col-sm-1 col-xs-2 icon-divider"><div class="icon-l_sim"></div></div>
                        <div class="col-md-11 col-sm-11 col-xs-10 acc_head_text">Sim Cards</div>
                    </div>
                </a>

                <div class="inneraccordionbox">
                    Content
                </div>                       
            </li>

            <li>                    
                <a href="#" class="open">
                    <div class="acc_head row">
                        <div class="col-md-1 col-sm-1 col-xs-2 icon-divider"><div class="icon-l_voucher"></div></div>
                        <div class="col-md-11 col-sm-11 col-xs-10 acc_head_text">Vouchers</div>
                    </div>
                </a>

                <div class="inneraccordionbox">
                    Content
                </div>                       
            </li>

            <li>                    
                <a href="#" class="open">
                    <div class="acc_head row">
                        <div class="col-md-1 col-sm-1 col-xs-2 icon-divider"><div class="icon-l_pin"></div></div>
                        <div class="col-md-11 col-sm-11 col-xs-10 acc_head_text">E-Pins</div>
                    </div>
                </a>

                <div class="inneraccordionbox">
                    Content
                </div>                       
            </li>

            <li>                    
                <a href="#" class="open">
                    <div class="acc_head row">
                        <div class="col-md-1 col-sm-1 col-xs-2 icon-divider"><div class="icon-layers"></div></div>
                        <div class="col-md-11 col-sm-11 col-xs-10 acc_head_text">Bundles</div>
                    </div>
                </a>

                <div class="inneraccordionbox">
                    Content
                </div>                       
            </li>

        </ul>

jQuery-

jQuery(document).ready(function($) {
    var open = $('.open'),
        a = $('ul').find('a');

    console.log(a.hasClass('active'));

    open.click(function(e){
        e.preventDefault();
        var $this = $(this),
            speed = 500;
        if($this.hasClass('active') === true) {
            $this.removeClass('active').next('.inneraccordionbox').slideUp(speed);
        } else if(a.hasClass('active') === false) {
            $this.addClass('active').next('.inneraccordionbox').slideDown(speed);
        } else {
            a.removeClass('active').next('.inneraccordionbox').slideUp(speed);
            $this.addClass('active').next('.inneraccordionbox').delay(speed).slideDown(speed);
        }
    });
});

CSS incase 如果你需要 -

/* inner accordion */
.acc_head {
height: 90px;
border-bottom: 1px solid #e1e9ec;
}
.icon-divider, .acc_head_text {
display: flex;
align-items: center;
height: 90px;
padding:0 20px;
}
.icon-divider {
border-right: 1px solid #ececec;       
}
.icon-divider div {
margin: 0 auto;    
}
.icon-divider div::before {
font-size: 44px;
color:#3fb3ec;
}
.acc_head_text {
background: url('../images/plus.png') no-repeat 97% 35px !important;
-webkit-transition: 0.5s;
color:#444444;
font-family: "Gotham Medium", Arial, Helvetica, sans-serif !important;
font-size: 20px;
}
a.active .acc_head_text {
background: url('../images/cross.png') no-repeat 97% 35px !important;
 -webkit-transition: 0.5s;
}
.inneraccordionbox {    
height:300px;
position:relative;
display:none;
padding: 0px;

}
.inneraccordion li {
background: #fff;
display:block;
padding-right:10px;
list-style:none;
border: 1px solid #e1e9ec;
border-bottom: none;
border-radius:3px; 
-moz-border-radius:3px; 
-webkit-border-radius:3px;
-webkit-border-radius: 3px;
-webkit-box-shadow: 0px 3px 1px 0px rgba(221,222,224,1);
-moz-box-shadow: 0px 3px 1px 0px rgba(221,222,224,1);
box-shadow: 0px 3px 1px 0px rgba(221,222,224,1);
margin-bottom: 10px; 
}
.inneraccordion li:last-child {
margin-bottom: 0;
}

知道如何实现吗?

最佳答案

我在其中添加了以下代码 - else if(a.hasClass('active') === false) 条件。它将所选元素向上移动 1 个位置。

li = $(this).parent();
li.insertBefore(li.prev(li));
li.slideUp(500, function(){
      //callback
}).slideDown(500);

要将所选元素移动到列表顶部,请将 li.insertBefore(li.prev(li)); 更改为 li.insertBefore(li.siblings(":eq (0)"));

这是一个Fiddle

关于javascript - jQuery Accordion - 将选定的一个向上移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31834193/

相关文章:

javascript - 如何在函数内返回 node.js 中导入的模块?

javascript - 将数据从弹出窗口发送到 extension.js 不起作用

javascript - 将 ASM.JS 代码插入 vanilla javascript

javascript - 分发 javascript 数组

javascript - x-editable 弹出窗口未显示在正确的位置

php - PJAX 不工作

html - flex 容器中的等高行

javascript - 在 Subscribe 函数中从 observableArray 中删除元素,而无需再次发出信号

html - 在 jquery 移动页脚中将元素对齐到中心

html - css 仅在没有空格时中断单词