Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery UI可排序和Cookie_Jquery_Jquery Ui_Cookies - Fatal编程技术网

jQuery UI可排序和Cookie

jQuery UI可排序和Cookie,jquery,jquery-ui,cookies,Jquery,Jquery Ui,Cookies,我必须承认,我对jQuery非常陌生,尽管我想以某种方式让它工作起来 我有一个igoogle风格的内容,带有可排序的小部件,代码如下 HTML 我如何使用cookie插件来完成这项工作 感谢您的时间和帮助。首先,下载cookie插件(如果您还没有): 接下来,阅读这篇解释如何使用插件的短文: 最后,决定要在页面加载之间存储哪些信息,然后在适当的时候连接事件以保存这些信息。要使用该信息,请添加一个onReady事件,用于查找该信息并对其进行处理 例如,如果要跟踪哪列的顺序,则需要在这些列上放置

我必须承认,我对jQuery非常陌生,尽管我想以某种方式让它工作起来

我有一个igoogle风格的内容,带有可排序的小部件,代码如下

HTML 我如何使用cookie插件来完成这项工作


感谢您的时间和帮助。

首先,下载cookie插件(如果您还没有):

接下来,阅读这篇解释如何使用插件的短文:

最后,决定要在页面加载之间存储哪些信息,然后在适当的时候连接事件以保存这些信息。要使用该信息,请添加一个onReady事件,用于查找该信息并对其进行处理

例如,如果要跟踪哪列的顺序,则需要在这些列上放置一些ID,然后执行以下操作:

$(".column").sortable({
  connectWith: '.column',
  handle: '.box-header',
  revert: 500
  update: function(event, ui) {
    // This will trigger after a sort is completed
    var ordering = "";
    var $columns = $(".column");
    $columns.each(function() {
      ordering += this.id + "=" + $columns.index(this) + ";";
    });
    $.cookie("ordering", ordering);
  }
});
然后执行以下操作以使用该信息:

$(function() {
  var ordering = $.cookie("ordering");
  var orderings = ordering.split(";");
  $.each(orderings, function(index, ordering) {
    // Use each ordering, which will be in the form of "someId=someIndex" to actually
    // sort your stuff.  Not super-familiar with the Sortable package so you'll have to look
    // this part up on your own ... or just use basic jQuery stuff
  };
});

希望能有帮助。

现在我可以得到这样的阵列

function saveOrder() {
    var cookieName = "order";
     $.cookie(cookieName, $(".column").each(function(){ $(this).sortable("toArray")}));
    }
然后

$(".column").sortable({
    connectWith: '.column',
        handle: '.box-header',
        revert: 500,
        update: function(event, ui) {
        saveOrder();

  }

现在,如何从cookie中检索它?

我在互联网上到处都能看到关于这个主题的很多东西。我发现它们不太准确和广泛。 下面是我为多列portlet仪表板选择的解决方案(如jQueryUI示例)。 首先,构建列和portlet

$( ".ui-portlet" ).addClass( "ui-widget ui-widget-content ui-helper-clearfix ui-corner-all" );
$( ".ui-column .ui-portlet" ).find( ".ui-portlet-header" )
              .addClass( "ui-widget-header ui-corner-all" )
              .prepend( "<span class='ui-icon ui-icon-minusthick'></span>")
              .end()
      .find( ".ui-portlet-content" );
$( ".ui-portlet .ui-portlet-header .ui-icon" ).click(function() {
      $( this ).toggleClass( "ui-icon-minusthick" ).toggleClass( "ui-icon-plusthick" );
      $( this ).parents( ".ui-portlet:first" ).find( ".ui-portlet-content" ).toggle("blind", "fast");
      return false;
});
$( ".ui-column" ).disableSelection();
然后,使用on update event函数在每次置换后设置cookie,使对象可排序

$( ".ui-column" ).sortable({
      connectWith: ".ui-column",
      handle: '.ui-portlet-header',
      update: function(event, ui) {
          var cooked = new Array;
          $( ".ui-column" ).each(function(index, domEle){ cooked[index]= $(domEle).sortable('toArray')});
          $.cookie('cookie_name', cooked.join('|'), { expires: 7, path: '/'});
      }
});
现在是restoreOrder函数

function restoreOrder() {
    var cookie = $.cookie('cookie_name');
    if (!cookie) return;
    var SavedID = cookie.split('|');
    for ( var u=0, ul=SavedID.length; u &lt; ul; u++ ){ SavedID[u] = SavedID[u].split(',');}
    for (var Scolumn=0, n = SavedID.length; Scolumn &lt; n; Scolumn++) {
        for (var Sitem=0, m = SavedID[Scolumn].length; Sitem &lt; m; Sitem++) {
            $(".ui-column").eq(Scolumn).append($(".ui-column").children("#" + SavedID[Scolumn][Sitem]));
        }
    }
}
// TODO check why an empty column crash the loops !? Should not be complicate...

而且在加载文档后,由于Elmatou的帮助,恢复订单()

也会自动恢复。只是一个对我有用的肮脏的补丁(在你填满饼干之前只是一封信)

你可以试试这个

var setSelector = "#list1";
var setCookieName = "listOrder";
var setCookieExpiry = 7;


// function that writes the list order to a cookie
function getOrder() {
    // save custom order to cookie
    $.cookie(setCookieName, $(setSelector).sortable("toArray"), { expires: setCookieExpiry, path: "/" });
}

// function that restores the list order from a cookie
function restoreOrder() {
    var list = $(setSelector);
    if (list == null) return

    // fetch the cookie value (saved order)
    var cookie = $.cookie(setCookieName);
    if (!cookie) return;

    // make array from saved order
    var IDs = cookie.split(",");

    // fetch current order
    var items = list.sortable("toArray");

    // make array from current order
    var rebuild = new Array();
    for ( var v=0, len=items.length; v<len;>
        rebuild[items[v]] = items[v];
    }

    for (var i = 0, n = IDs.length; i &lt; n; i++) {


        var itemID = IDs[i];

        if (itemID in rebuild) {


            var item = rebuild[itemID];

            var child = $("ul.ui-sortable").children("#" + item);

            var savedOrd = $("ul.ui-sortable").children("#" + itemID);

            child.remove();

            $("ul.ui-sortable").filter(":first").append(savedOrd);
        }
    }
}

// code executed when the document loads
$(function() {

    $(setSelector).sortable({
        axis: "y",
        cursor: "move",
        update: function() { getOrder(); }
    });

    restoreOrder();
});
var setSelector=“#list1”;
var setCookieName=“listOrder”;
var setcookieexpire=7;
//将列表顺序写入cookie的函数
函数getOrder(){
//将自定义订单保存到cookie
$.cookie(setCookieName,$(setSelector).sortable(“toArray”),{expires:setCookieExpire,路径:“/”});
}
//从cookie恢复列表顺序的函数
函数restoreOrder(){
变量列表=$(设置选择器);
if(list==null)返回
//获取cookie值(保存的顺序)
var cookie=$.cookie(setCookieName);
如果(!cookie)返回;
//从保存的顺序生成数组
var id=cookie.split(“,”);
//获取当前订单
var项目=列表可排序(“toArray”);
//从当前订单生成数组
var rebuild=新数组();
对于(var v=0,len=items.length;v
重建[项目[v]]=项目[v];
}
for(var i=0,n=IDs.length;in;i++){
var itemID=IDs[i];
if(重建中的项目ID){
var item=重建[itemID];
var child=$(“ul.ui可排序”).children(“#”+项);
var savedOrd=$(“ul.ui可排序”).children(“#”+itemID);
child.remove();
$(“ul.ui可排序”).filter(“:first”).append(savedOrd);
}
}
}
//加载文档时执行的代码
$(函数(){
$(设置选择器)。可排序({
轴:“y”,
光标:“移动”,
更新:函数(){getOrder();}
});
恢复顺序();
});
保存在cookie中

引自

这里是一个使用localStorage保存订单的示例。 请参见示例,首先元素需要一个id。该id将被存储并用于恢复排序

演示:

$(函数(){
//将id添加到li元素中,以便在排序后,我们可以将顺序保存在localstorage中
$(“#sortable>li”).each(函数(索引,domEle){$(domEle.attr('id','item#+索引)});
$(“#可排序”)。可排序({
占位符:“ui状态突出显示”,
更新:函数(事件,ui){
localStorage.setItem(“已排序的”,$(“#可排序的”).sortable(“toArray”);
}
});
恢复运动();
});
函数restoreSorted(){
var sorted=localStorage[“sorted”];
如果(排序==未定义)返回;
var元素=$(“#可排序”);
var sortedar=已排序的.split(“,”);
对于(变量i=0;i
块1
块2
块3
块4
块5
块6
块7
块8
块9
块10
块11
块12


只是澄清一下,你想在cookie中存储用户排序的最后一列吗?我应该更具体一些。这是预览。一列向左浮动,另一列向右浮动,在右列中,会有更多的框。我只想实现的是将布局存储到cookie中,然后加载用户刷新后,它将被删除。>>现在如何从cookie中检索它?var sortableToArray=$.cookie(“order”);您能回答吗?
$( ".ui-column" ).sortable({
      connectWith: ".ui-column",
      handle: '.ui-portlet-header',
      update: function(event, ui) {
          var cooked = new Array;
          $( ".ui-column" ).each(function(index, domEle){ cooked[index]= $(domEle).sortable('toArray')});
          $.cookie('cookie_name', cooked.join('|'), { expires: 7, path: '/'});
      }
});
function restoreOrder() {
    var cookie = $.cookie('cookie_name');
    if (!cookie) return;
    var SavedID = cookie.split('|');
    for ( var u=0, ul=SavedID.length; u &lt; ul; u++ ){ SavedID[u] = SavedID[u].split(',');}
    for (var Scolumn=0, n = SavedID.length; Scolumn &lt; n; Scolumn++) {
        for (var Sitem=0, m = SavedID[Scolumn].length; Sitem &lt; m; Sitem++) {
            $(".ui-column").eq(Scolumn).append($(".ui-column").children("#" + SavedID[Scolumn][Sitem]));
        }
    }
}
// TODO check why an empty column crash the loops !? Should not be complicate...
$( ".ui-column" ).sortable({
      connectWith: ".ui-column",
      handle: '.ui-portlet-header',
      update: function(event, ui) {
          var cooked = new Array;
          $( ".ui-column" ).each(function(index, domEle){ cooked[index]= $(domEle).sortable('toArray')});
          $.cookie('cookie_name', 'x'+cooked.join('|'), { expires: 7, path: '/'});
      }
});
var setSelector = "#list1";
var setCookieName = "listOrder";
var setCookieExpiry = 7;


// function that writes the list order to a cookie
function getOrder() {
    // save custom order to cookie
    $.cookie(setCookieName, $(setSelector).sortable("toArray"), { expires: setCookieExpiry, path: "/" });
}

// function that restores the list order from a cookie
function restoreOrder() {
    var list = $(setSelector);
    if (list == null) return

    // fetch the cookie value (saved order)
    var cookie = $.cookie(setCookieName);
    if (!cookie) return;

    // make array from saved order
    var IDs = cookie.split(",");

    // fetch current order
    var items = list.sortable("toArray");

    // make array from current order
    var rebuild = new Array();
    for ( var v=0, len=items.length; v<len;>
        rebuild[items[v]] = items[v];
    }

    for (var i = 0, n = IDs.length; i &lt; n; i++) {


        var itemID = IDs[i];

        if (itemID in rebuild) {


            var item = rebuild[itemID];

            var child = $("ul.ui-sortable").children("#" + item);

            var savedOrd = $("ul.ui-sortable").children("#" + itemID);

            child.remove();

            $("ul.ui-sortable").filter(":first").append(savedOrd);
        }
    }
}

// code executed when the document loads
$(function() {

    $(setSelector).sortable({
        axis: "y",
        cursor: "move",
        update: function() { getOrder(); }
    });

    restoreOrder();
});
      $(function() {

        //add id's to the li elements so after sorting we can save the order in localstorage
        $( "#sortable>li" ).each(function(index, domEle){ $(domEle).attr('id', 'item_'+index)});

        $( "#sortable" ).sortable({
          placeholder: "ui-state-highlight",
          update: function(event, ui) {        
            localStorage.setItem("sorted",  $("#sortable").sortable("toArray") );
          }
        });

        restoreSorted();

      });


      function restoreSorted(){

          var sorted = localStorage["sorted"];      
          if(sorted == undefined) return;

          var elements = $("#sortable");
          var sortedArr = sorted.split(",");

          for (var i = 0; i < sortedArr.length; i++){
              var el = elements.find("#" + sortedArr[i]);
              $("#sortable").append(el);
          };

      }

<ul id="sortable">
  <li class="ui-state-default">block 1</li>
  <li class="ui-state-default">block 2</li>
  <li class="ui-state-default">block 3</li>
  <li class="ui-state-default">block 4</li>
  <li class="ui-state-default">block 5</li>
  <li class="ui-state-default">block 6</li>
  <li class="ui-state-default">block 7</li>
  <li class="ui-state-default">block 8</li>
  <li class="ui-state-default">block 9</li>
  <li class="ui-state-default">block 10</li>
  <li class="ui-state-default">block 11</li>
  <li class="ui-state-default">block 12</li>
</ul>