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