1

解決した

一つ質問があります。

「展開」と「折りたたみ」で jQuery Cookie を使用して Nestable jQuery Plugin を使用できますか? 「展開」と「折りたたみ」の位置を覚えるため。

スクリプトへのリンク:ネスト可能な jQuery プラグイン

ご回答ありがとうございます!

これは、Cookie を保存するスクリプトです。

expandItem: function(li)
    {
        li.removeClass(this.options.collapsedClass);
        li.children('[data-action="expand"]').hide();
        li.children('[data-action="collapse"]').show();
        li.children(this.options.listNodeName).show();
        if(getCookie("tree") != null){
            var CookieValue = getCookie("tree") + li.attr('data-id') + ",";
        }
        else{
            var CookieValue = li.attr('data-id') + ",";
        }
        $.cookie("tree", CookieValue, {expires:3600, path:'/administrator/'});
    },

    collapseItem: function(li, a)
    {
        var lists = li.children(this.options.listNodeName);
        if (lists.length) {                
            li.addClass(this.options.collapsedClass);
            li.children('[data-action="collapse"]').hide();
            li.children('[data-action="expand"]').show();
            li.children(this.options.listNodeName).hide();
            if(getCookie("tree") != null){
                var CookieValueArray = getCookie("tree").split(",");
                for(i=0;i<CookieValueArray.length;i++){
                    if(CookieValueArray[i] == li.attr('data-id') && a == true){
                        li.children('[data-action="expand"]').hide();
                        li.children('[data-action="collapse"]').show();
                        li.children(this.options.listNodeName).show();
                    }
                }
                if(a != true){
                    var CookieValue = "";
                    for(i=0;i<CookieValueArray.length-1;i++){
                        if(CookieValueArray[i] != li.attr('data-id')){
                            CookieValue += CookieValueArray[i] + ",";
                        }
                    }
                    if(CookieValue == ""){
                        $.cookie("tree", "", {expires:-1, path:'/administrator/'});
                    }
                    else{
                        $.cookie("tree", CookieValue, {expires:3600, path:'/administrator/'});
                    }
                }
            }
        }
    },
4

1 に答える 1

1

はい。

折りたたまれた状態を追加して、シリアライズ機能を変更する必要があると思います。

serialize: function()
    {
        var data,
            depth = 0,
            list  = this;
            step  = function(level, depth)
            {
                var array = [ ],
                    items = level.children(list.options.itemNodeName);
                items.each(function()
                {
                    var li   = $(this),
          // Check if dd-collapse is part of the class of the <li> element
                        var collapsed = "open";
                        if(li.hasClass( "dd-collapsed" ){
                          collapsed = "collapsed";
                        }
                        item = $.extend({}, li.data(), collapsed),
                        sub  = li.children(list.options.listNodeName);
                    if (sub.length) {
                        item.children = step(sub, depth + 1);
                    }
                    array.push(item);
                });
                return array;
            };
        data = step(list.el.find(list.options.listNodeName).first(), depth);
        return data;
    }

次に、展開/折りたたみイベントで Cookie を書き込みます (Cookie の内容はシリアル化された文字列になります)。

expandItem: function(li)
    {
        li.removeClass(this.options.collapsedClass);
        li.children('[data-action="expand"]').hide();
        li.children('[data-action="collapse"]').show();
        li.children(this.options.listNodeName).show();
        $.cookie("your_cookie", this.serialize());
    },

    collapseItem: function(li)
    {
        var lists = li.children(this.options.listNodeName);
        if (lists.length) {
            li.addClass(this.options.collapsedClass);
            li.children('[data-action="collapse"]').hide();
            li.children('[data-action="expand"]').show();
            li.children(this.options.listNodeName).hide();
        }
        $.cookie("your_cookie", this.serialize());
    },

    expandAll: function()
    {
        var list = this;
        list.el.find(list.options.itemNodeName).each(function() {
            list.expandItem($(this));
        });
        $.cookie("your_cookie", this.serialize());
    },

    collapseAll: function()
    {
        var list = this;
        list.el.find(list.options.itemNodeName).each(function() {
            list.collapseItem($(this));
        });
        $.cookie("your_cookie", this.serialize());
    }

もちろん、ネスト可能なものの前に jquery.cookie.js をロードする必要があります。

試したことはありませんが、頭の中で機能します... ;)

于 2013-10-20T11:23:29.260 に答える