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学习之一个简易的日历控件
Mar 24 Javascript
Yii-自定义删除确认弹框(zyd)jquery实现代码
Mar 04 Javascript
javascript下拉列表菜单的实现方法
Nov 18 Javascript
几种二级联动案例(jQuery\Array\Ajax php)
Aug 13 Javascript
Bootstrap Modal遮罩弹出层代码分享
Nov 21 Javascript
bootstrap IE8 兼容性处理
Mar 22 Javascript
关于jQuery.ajax()的jsonp碰上post详解
Jul 02 jQuery
input输入框内容实时监测(附代码)
Aug 15 Javascript
浅谈React深度编程之受控组件与非受控组件
Dec 26 Javascript
JS中的BOM应用
Feb 02 Javascript
Vue.directive()的用法和实例详解
Mar 04 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
Dec 10 jQuery
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页面防重复提交方法总结
2013/11/25 PHP
体育彩票排列三组选三算法分享
2014/03/07 PHP
php 实现301重定向跳转实例代码
2016/07/18 PHP
PHP中isset、empty的用法与区别示例详解
2020/11/05 PHP
打造基于jQuery的高性能TreeView(asp.net)
2011/02/23 Javascript
基于jquery实现点击左右按钮图片横向滚动
2013/04/11 Javascript
Extjs4 类的定义和扩展实例
2013/06/28 Javascript
JS Replace()的高级使用方法介绍
2013/06/29 Javascript
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
javascript 表格内容排序 简单操作示例代码
2014/01/03 Javascript
node.js中的console.timeEnd方法使用说明
2014/12/09 Javascript
JavaScript验证Email(3种方法)
2015/09/21 Javascript
浅谈JS之tagNaem和nodeName
2016/09/13 Javascript
原生javascript上传图片带进度条【实例分享】
2017/04/06 Javascript
解决Vue不能检测数组或对象变动的问题
2018/02/24 Javascript
vue嵌套路由与404重定向实现方法分析
2018/05/04 Javascript
vue+axios+element ui 实现全局loading加载示例
2018/09/11 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
2018/09/18 Javascript
使用Angular 6创建各种动画效果的方法
2018/10/10 Javascript
javascript面向对象三大特征之多态实例详解
2019/07/24 Javascript
JavaScript代理模式原理与用法实例详解
2020/03/10 Javascript
js实现炫酷光感效果
2020/09/05 Javascript
[01:36]DOTA2完美大师赛趣味视频之与队友相处的十万个技巧
2017/11/19 DOTA
[54:45]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 Optic vs OG
2018/04/02 DOTA
python列表与元组详解实例
2013/11/01 Python
在树莓派2或树莓派B+上安装Python和OpenCV的教程
2015/03/30 Python
研究Python的ORM框架中的SQLAlchemy库的映射关系
2015/04/25 Python
python解析html提取数据,并生成word文档实例解析
2018/01/22 Python
详解Python装饰器
2019/03/25 Python
最新2019Pycharm安装教程 亲测
2020/02/28 Python
Selenium自动化测试工具使用方法汇总
2020/06/12 Python
通过实例解析Python文件操作实现步骤
2020/09/21 Python
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
全国道德模范事迹
2014/02/01 职场文书
Python 机器学习工具包SKlearn的安装与使用
2021/05/14 Python