jquery中的sortable排序之后的保存状态的解决方法


Posted in Javascript onJanuary 28, 2010

当时也就从jquery的官方网站上抄了几句搞上去,后来发现用处不大,还挺慢。汗~~~以至于到今天早上也没搞清楚怎么样才能把排序后的结果保存起来,正好现在公司要做一个这样的功能,就又从新学习了下。
首先,在jquery的官方demo(http://jqueryui.com/demos/)上找到了相似的代码。我所要的叫就是portlets(http://jqueryui.com/demos/sortable/portlets.html)这种效果。就像igoogle首页那样的。冒似很简单,把要引用的js都加入后,然后几行代码就完事了。

<script type="text/javascript"> 
$(function() { 
$(".column").sortable({ 
connectWith: '.column' 
}); 
}); 
</script>

html代码省略...详情请查看演示

写完这些之后,你就可以试着拖拽了。有没有觉得很有成就感?不错,小伙子,有前途。sortable 有许多的参数,详细的自己去官网上看吧!只说下这里的connectWith:'.column'是什么意思,它就是说,凡是class为column的,它都可以把一个column的portlet拖到另一个column里去。试试你就知道了。当然今天的重点并不是怎么样去拖拽它,而是拖拽之后刷新还保存着当时的顺序。

遇到点小困难了,不过那也得上啊,不然以后都被女孩子肯嫁给你!^_^ 于是乎我就开始google百度了。有人说用sortable的serialize方法可以得到一个ID数组,可惜,我确实没有得到。如果你做到了也请你tell me 一下;还有人说用toArray方法也可以得到ID数组.这次也确实得到了。不过非常令人讨厌的事发生了。

$('.column').sortable('toArray');

这样也只能得到第一个class是column里的ID数组.用each()? I tried, but not work;可能你能做到,也请你告诉我吧!所以只能转走其他方法了。或许你会说,这还不简单么,直接把整个网页的布局存起来不就OK了?哈哈,I also think so!通过iedeveloper调试工具发现,它们拖动之后发现了改变,变的不是样式,而是div的先后顺序。如果我把整个内容保存起来的话,似乎也行得通,不过量就有点大了,也不适于动态的内容。怎么办呢,于是我就想着只存它们的ID顺序不就O了吗?于是我又给它们每人一个ID了。

万事开头难,有了这个思路了之后,你是否已经厕所打开了呢?我先去下便下,谢谢开门,马上回来!

接下来就一步步按照这个思路来吧。首先是获取到所有的column.

$.each($(".column"), function(m) {}

再找每个column下的portlet;

$.each($(".column"), function(m) {
$.each($(this).children(".portlet"), function(d) {
}

接着就是把它们按自己的方式存起来。

function saveLayout(){ 
var list = ""; 
$.each($(".column"), function(m) { 
list += $(this).attr('id') + ":"; 
$.each($(this).children(".portlet"), function(d) { 
list += $(this).attr('id') + "@"; 
}) 
list += "|"; 
}) 
$.cookie("list", list)}

这里还用到了另一组件jquery.cookie

改下开始的

$(".column").sortable({ 
connectWith: '.column', 
stop: saveLayout 
});

stop是指拖拽结束后触发的事件.

最后就是按顺序读到容器里去,这里我就不多说了,只可意会,不能言传哈。贴代码吧:

var list = $.cookie("list"); //获取cookie里的list值 
//alert(list) 
var arrColumn = list.split('|'); 
$.each(arrColumn, function(m, n) { 
var elemId = n.split(':')[0]; //容器ID 
var arrRow = n.split(':')[1] ? n.split(':')[1].split('@') : ""; //单个序列ID 
$.each(arrRow, function(m, n) { 
if (n) {//排除空值 
$("#" + elemId).append($("#sb" + n).attr('id', n))//把序列填加进容器 
} 
}); 
})

好了,今天就这样吧,打字排版花了我一个小时了,公司给我的是一小时16块RMB。所以BYE!
如果你有任何的问题,都不要来问我,我很忙。到QQ群5678537里找其他人探讨吧!

演示代码http://demo.3water.com/js/Sortable/Sortable.htm

Javascript 相关文章推荐
JavaScript 计算当天是本年本月的第几周
Mar 22 Javascript
javascript写的一个链表实现代码
Oct 25 Javascript
Javascript insertAfter() 实现函数代码
Oct 12 Javascript
JS实现div内部的文字或图片自动循环滚动代码
Apr 19 Javascript
node.js中的querystring.parse方法使用说明
Dec 10 Javascript
详解vue2路由vue-router配置(懒加载)
Apr 08 Javascript
使用ES6语法重构React代码详解
May 09 Javascript
JS库之ParticlesJS使用简介
Sep 12 Javascript
微信小程序通过一个json实现分享朋友圈图片
Sep 03 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
Jan 05 Javascript
微信小程序实现菜单左右联动
May 19 Javascript
JavaScript组合设计模式--改进引入案例分析
May 23 Javascript
javascript面向对象的方式实现的弹出层效果代码
Jan 28 #Javascript
jquery 常用操作方法
Jan 28 #Javascript
jquery 经典动画菜单效果代码
Jan 26 #Javascript
使用JQuery进行跨域请求
Jan 25 #Javascript
javascript 的Document属性和方法集合
Jan 25 #Javascript
起点页面传值js,有空研究学习下
Jan 25 #Javascript
js 巧妙去除数组中的重复项
Jan 25 #Javascript
You might like
linux命令之调试工具strace的深入分析
2013/06/03 PHP
php堆排序(heapsort)练习
2013/11/13 PHP
php计划任务之ignore_user_abort函数实现方法
2015/01/08 PHP
PHP处理大量表单字段的便捷方法
2015/02/07 PHP
php实现curl模拟ftp上传的方法
2015/07/29 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
JavaScript使用过程中需要注意的地方和一些基本语法
2010/08/26 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
微信JS接口汇总及使用详解
2015/01/09 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
2016/01/22 Javascript
js中数组结合字符串实现查找(屏蔽广告判断url等)
2016/03/30 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
2016/06/03 Javascript
jQuery实现右下角可缩放大小的层完整实例
2016/06/20 Javascript
Node.js使用NodeMailer发送邮件实例代码
2017/03/06 Javascript
vue项目tween方法实现返回顶部的示例代码
2018/03/02 Javascript
jQuery md5加密插件jQuery.md5.js用法示例
2018/08/24 jQuery
解决Layui中layer报错的问题
2019/09/03 Javascript
Layui实现数据表格默认全部显示(不要分页)
2019/10/26 Javascript
零基础写python爬虫之打包生成exe文件
2014/11/06 Python
Python实现购物车功能的方法分析
2017/11/10 Python
python opencv之SURF算法示例
2018/02/24 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
2018/10/15 Python
Python logging设置和logger解析
2019/08/28 Python
Python中__repr__和__str__区别详解
2019/11/07 Python
python使用opencv resize图像不进行插值的操作
2020/07/05 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
欧洲最大的化妆品连锁公司:Douglas道格拉斯
2017/05/06 全球购物
小学教师的自我评价范例
2013/10/31 职场文书
物业管理计划书
2014/01/10 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
工作检讨书500字
2014/10/19 职场文书
见习报告怎么写
2014/10/31 职场文书
python绘制箱型图
2021/04/27 Python
pytorch 实现多个Dataloader同时训练
2021/05/29 Python