jQuery如何改变相邻的div元素的HTML顺序?

3

我的标记看起来像这样:

<ul class="menu collapsible">
    <li class='expand sectionTitle home'>
        <a class='clicker' href='#'>Home</a>
        <ul class='acitem'>
            <li class="section">stuff goes here
        </ul>
    </li>

    <li class='expand sectionTitle section1'>
        <a class='clicker' href='#'>Section 1</a>
        <ul class='acitem'>
            <li class="section">stuff goes here
        </ul>
    </li>

    <li class='expand sectionTitle section2'>
        <a class='clicker' href='#'>Section 2</a>
        <ul class='acitem'>
            <li class="section">stuff goes here
        </ul>
    </li>
</ul>

我想对处理手风琴行为的jQuery脚本(见下文)进行补充,以便在单击“clicker”元素时,其父div向上滑动到第二个位置。我始终希望“Home” div处于顶部,但我希望当前“active”的div在第二个位置展开。
以下是控制菜单手风琴行为的jQuery代码:
jQuery.fn.initMenu = function() {  
    return this.each(function(){
        var theMenu = $(this).get(0);
        $('.acitem', this).hide();
        $('li.expand > .acitem', this).show();
        $('li.expand > .acitem', this).prev().addClass('active');
        $('li a', this).click(
            function() {
                var theElement = $(this).next();
                var parent = this.parentNode.parentNode;
                if($(parent).hasClass('noaccordion')) {
                    $(theElement).slideToggle('normal', function() {
                        if ($(this).is(':visible')) {
                            $(this).prev().addClass('active');
                        }
                        else {
                            $(this).prev().removeClass('active');
                        }    
                    });
                    return false;
                }
                else {
                    if(theElement.hasClass('acitem') && theElement.is(':visible')) {
                        if($(parent).hasClass('collapsible')) {
                            $('.acitem:visible', parent).first().slideUp('normal', 
                            function() {
                                $('.acitem:visible', parent).first().prev().removeClass('active');
                            }
                        );
                    }
                    return false;
                }
                if(theElement.hasClass('acitem') && !theElement.is(':visible')) {                        
                    $('.acitem:visible', parent).first().slideUp('normal', function() {
                        $(this).prev().removeClass('active');
                    });
                    theElement.slideDown('normal', function() {
                        $(this).prev().addClass('active');
                    });
                    return false;
                }
            }
        }
    );
});
};

$(document).ready(function() {$('.menu').initMenu();});
1个回答

6

像这样吗?

http://jsfiddle.net/hPZs2/

已添加。

var homeCheckTmp;

在你的变量声明接近顶部之后,

homeCheckTmp = theElement.closest('li.expand');
if(!homeCheckTmp.is("li.home")) {
    homeCheckTmp.insertAfter(homeCheckTmp.siblings('.home'));
}

在元素向下滑动之前。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接