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系列(10) JavaScript核心(晋级高手必读篇)
Jan 15 Javascript
jQuery幻灯片特效代码分享--鼠标滑过按钮时切换(2)
Nov 18 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
Dec 07 Javascript
javascript设置和获取cookie的方法实例详解
Jan 05 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
Sep 06 Javascript
AngularJS使用ng-app自动加载bootstrap框架问题分析
Jan 04 Javascript
Node.js Express 框架 POST方法详解
Jan 23 Javascript
vue2.0 中#$emit,$on的使用详解
Jun 07 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
Sep 27 Javascript
手把手带你封装一个vue component第三方库
Feb 14 Javascript
浅谈layui 表单元素的选中问题
Oct 25 Javascript
JS函数参数的传递与同名参数实例分析
Mar 16 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
php文本转图片自动换行的方法
2013/03/13 PHP
19个超实用的PHP代码片段
2014/03/14 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
2014/07/19 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
thinkphp框架使用JWTtoken的方法详解
2019/10/10 PHP
Valerio 发布了 Mootools
2006/09/23 Javascript
jQuery实现新消息在网页标题闪烁提示
2015/06/23 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
小程序开发实战:实现九宫格界面的导航的代码实现
2017/01/19 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
vue+vue-validator 表单验证功能的实现代码
2017/11/13 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
解决layui中的form表单与button的点击事件冲突问题
2018/08/15 Javascript
最简单的JS实现json转csv的方法
2019/01/10 Javascript
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
JS实现烟花爆炸效果
2020/03/10 Javascript
[03:18]DOTA2放量测试专访820:希望玩家加入国服大家庭
2013/08/25 DOTA
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
Redis使用watch完成秒杀抢购功能的代码
2018/05/07 Python
python判断列表的连续数字范围并分块的方法
2018/11/16 Python
Python3将ipa包中的文件按大小排序
2020/04/17 Python
用 Python 制作地球仪的方法
2020/04/24 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
使用HTML5的链接预取功能(link prefetching)给网站提速
2012/12/13 HTML / CSS
约瑟夫·特纳男装:Joseph Turner
2017/10/10 全球购物
Clarisonic美国官网:科莱丽声波洁面仪
2017/10/12 全球购物
助人为乐表扬信范文
2014/01/14 职场文书
二年级学生评语大全
2014/04/23 职场文书
森林防火宣传标语
2014/06/27 职场文书
个人汇报材料范文
2014/12/30 职场文书
个园导游词
2015/02/04 职场文书
运动会新闻稿
2015/07/17 职场文书
MySql子查询IN的执行和优化的实现
2021/08/02 MySQL
小程序实现侧滑删除功能
2022/06/25 Javascript