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 放大镜 移动镜片效果代码
May 09 Javascript
JavaScript检查弹出窗口是否被阻拦的方法技巧
Mar 13 Javascript
jQuery中next方法用法实例
Apr 24 Javascript
浅析JavaScript中作用域和作用域链
Dec 06 Javascript
jQuery中each循环的跳出和结束实例
Aug 16 jQuery
angular4 如何在全局设置路由跳转动画的方法
Aug 30 Javascript
springmvc接收jquery提交的数组数据代码分享
Oct 28 jQuery
vue 系列——vue2-webpack2框架搭建踩坑之路
Dec 22 Javascript
JS数组去重常用方法实例小结【4种方法】
May 28 Javascript
Vue项目数据动态过滤实践及实现思路
Sep 11 Javascript
原生js添加一个或多个类名的方法分析
Jul 30 Javascript
Vue中nprogress页面加载进度条的方法实现
Nov 13 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
咖啡磨器 如何选购一台适合家用的意式磨豆机
2021/03/05 新手入门
收集的PHP中与数组相关的函数
2007/03/22 PHP
PHP无法访问远程mysql的问题分析及解决
2013/05/16 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
2016/03/02 PHP
Yii2压缩PHP中模板代码的输出问题
2018/08/28 PHP
人人网javascript面试题 可以提前实现下
2012/01/05 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
2013/11/13 Javascript
浅析document.ready和window.onload的区别讲解
2013/12/18 Javascript
JavaScript函数定义的常见注意事项小结
2014/09/16 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
Jquery数字上下滚动动态切换插件
2015/08/08 Javascript
JS拖拽组件学习使用
2016/01/19 Javascript
原生js canvas实现鼠标跟随效果
2020/08/02 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
2020/12/14 Vue.js
[03:17]2014DOTA2 国际邀请赛中国区预选赛 四强专访
2014/05/23 DOTA
[50:58]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 Mineski vs EG
2018/04/03 DOTA
python 垃圾收集机制的实例详解
2017/08/20 Python
使用tensorflow实现线性svm
2018/09/07 Python
python批量复制图片到另一个文件夹
2018/09/17 Python
python2与python3中关于对NaN类型数据的判断和转换方法
2018/10/30 Python
dataframe 按条件替换某一列中的值方法
2019/01/29 Python
Python判断有效的数独算法示例
2019/02/23 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
python如何发送带有附件、正文为HTML的邮件
2021/02/27 Python
全面总结使用CSS实现水平垂直居中效果的方法
2016/03/10 HTML / CSS
家庭户外服装:Hawkshead
2017/11/02 全球购物
加利福尼亚州威尼斯的女性奢侈品设计师服装和概念店:Mona Moore
2018/09/13 全球购物
西班牙土拨鼠床垫公司,感觉在云端:Marmota
2019/03/18 全球购物
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
活动宣传策划方案
2014/05/23 职场文书
学术诚信承诺书
2014/05/26 职场文书
2014企业领导班子四风对照检查材料思想汇报
2014/09/17 职场文书
2014司机年终工作总结
2014/12/05 职场文书
六年级小学生评语
2014/12/26 职场文书
司机个人年终总结
2015/03/03 职场文书
使用CSS自定义属性实现骨架屏效果
2022/06/21 HTML / CSS