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 相关文章推荐
mouse_on_title.js
Aug 25 Javascript
javascript编程起步(第五课)
Feb 27 Javascript
JavaScript 新手24条实用建议[TUTS+]
Jun 21 Javascript
JavaScript Math.floor方法(对数值向下取整)
Jan 09 Javascript
js获取域名的方法
Jan 27 Javascript
灵活的理解JavaScript中的this指向
Feb 25 Javascript
使用vue.js编写蓝色拼图小游戏
Mar 17 Javascript
QRCode.js:基于JQuery的生成二维码JS库的使用
Jun 23 jQuery
javascript导出csv文件(excel)的方法示例
Aug 25 Javascript
分享Angular http interceptors 拦截器使用(推荐)
Nov 10 Javascript
VUE 单页面使用 echart 窗口变化时的用法
Jul 30 Javascript
小程序wx.getUserProfile接口的具体使用
Jun 02 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
thinkPHP5框架设置404、403等http状态页面的方法
2018/06/05 PHP
Laravel框架实现的批量删除功能示例
2019/01/16 PHP
JS格式化数字金额用逗号隔开保留两位小数
2013/10/18 Javascript
js实现的折叠导航示例
2013/11/29 Javascript
JS表的模拟方法
2015/02/05 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
2016/06/28 Javascript
Highcharts入门之简介
2016/08/02 Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
2016/09/26 Javascript
详解Vue-基本标签和自定义控件
2017/03/24 Javascript
移动端触屏幻灯片图片切换插件idangerous swiper.js
2017/04/10 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
webpack是如何实现模块化加载的方法
2019/11/06 Javascript
JavaScript实现HSL拾色器
2020/05/21 Javascript
jQuery实现滑动开关效果
2020/08/02 jQuery
在vue项目中promise解决回调地狱和并发请求的问题
2020/11/09 Javascript
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
2021/01/22 Vue.js
Python访问MySQL封装的常用类实例
2014/11/11 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
Python 经典面试题 21 道【不可错过】
2018/09/21 Python
Python中的CSV文件使用&quot;with&quot;语句的方式详解
2018/10/16 Python
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
Linux下远程连接Jupyter+pyspark部署教程
2019/06/21 Python
pytorch实现特殊的Module--Sqeuential三种写法
2020/01/15 Python
Tensorflow实现在训练好的模型上进行测试
2020/01/20 Python
Python基于yield遍历多个可迭代对象
2020/03/12 Python
python3发送request请求及查看返回结果实例
2020/04/30 Python
利用CSS3的border-radius绘制太极及爱心图案示例
2016/05/17 HTML / CSS
中国酒类在线零售网站:酒仙网
2016/08/20 全球购物
Kiwi.com中国:找到特价机票并发现新目的地
2019/10/27 全球购物
安全生产实施方案
2014/02/23 职场文书
竞聘演讲稿开场白
2014/08/25 职场文书
升学宴答谢词
2015/01/05 职场文书
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android