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 相关文章推荐
纯js和css实现渐变色包括静态渐变和动态渐变
May 29 Javascript
IE下通过a实现location.href 获取referer的值
Sep 04 Javascript
jquery手风琴特效插件
Feb 04 Javascript
jQuery构造函数init参数分析
May 13 Javascript
jquery彩色投票进度条简单实例演示
Jul 23 Javascript
JS代码实现table数据分页效果
May 26 Javascript
纯js实现html转pdf的简单实例(推荐)
Feb 16 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
Jun 12 Javascript
JavaScript实现滑动导航栏效果
Aug 30 Javascript
jQuery实现王者荣耀手风琴效果
Jan 17 jQuery
简单了解JavaScript作用域
Jul 31 Javascript
vue-cil之axios的二次封装与proxy反向代理使用说明
Apr 07 Vue.js
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
php中require和require_once的区别说明
2014/02/27 PHP
php使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
用Javascript实现锚点(Anchor)间平滑跳转
2009/09/08 Javascript
javascript parseInt与Number函数的区别
2010/01/21 Javascript
更换select下拉菜单背景样式的实现代码
2011/12/20 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
用js的for循环获取radio选中的值
2013/10/21 Javascript
jquery validate在ie8下的bug解决方法
2013/11/13 Javascript
node.js正则表达式获取网页中所有链接的代码实例
2014/06/03 Javascript
使用iojs的jsdom库实现同步系统时间
2015/04/20 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
Json按某个键的值进行排序
2016/12/22 Javascript
JavaScript实现实时更新系统时间的实例代码
2017/04/04 Javascript
微信小程序 页面跳转传值实现代码
2017/07/27 Javascript
JS实现左边列表移到到右边列表功能
2018/03/28 Javascript
JS实现时间校验的代码
2020/05/25 Javascript
从源码角度来回答keep-alive组件的缓存原理
2021/01/18 Javascript
Python通过解析网页实现看报程序的方法
2014/08/04 Python
Python实现简单网页图片抓取完整代码实例
2017/12/15 Python
Python实现求数列和的方法示例
2018/01/12 Python
Python实现k-means算法
2018/02/23 Python
Django Rest framework之认证的实现代码
2018/12/17 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
2020/09/23 Python
Python和Bash结合在一起的方法
2020/11/13 Python
python爬取抖音视频的实例分析
2021/01/19 Python
Bibloo罗马尼亚网站:女装、男装、童装及鞋子和配饰
2019/07/20 全球购物
《草原》教学反思
2014/02/15 职场文书
群众路线个人剖析材料
2014/10/07 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
支行行长岗位职责
2015/02/15 职场文书
2015年七夕爱情寄语
2015/03/24 职场文书
JavaScript函数柯里化
2021/11/07 Javascript
Python使用OpenCV实现虚拟缩放效果
2022/02/28 Python
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python
鲲鹏 CentOS 7 安装Python3.7
2022/05/11 Servers