纯JS操作服务器绑定控件(Repeat)实现表头升降排序
JS实现功能
var obj = function (id) {
return "string" == typeof id ? document.getElementById(id) : id;
};
var Class = {
create: function () {
return function () {
this.initialize.apply(this, arguments);
}
}
}
Object.extend = function (destination, source) {
for (var property in source) {
destination[property] = source[property];
}
return destination;
}
function Each(list, fun) {
for (var i = 0, len = list.length; i < len; i++) { fun(list[i], i); }
};
var TableOrder = Class.create(); ;
TableOrder.prototype = {
initialize: function (tbody) {
var oThis = this;
this.Body = obj(tbody); //tbody對象
this.Rows = []; //行集合
Each(this.Body.rows, function (o) { oThis.Rows.push(o); })
},
//排序并顯示
Sort: function (order) {
//排序
this.Rows.sort(this.Compare(order));
order.Down && this.Rows.reverse();
//顯示表格
var oFragment = document.createDocumentFragment();
Each(this.Rows, function (o) { oFragment.appendChild(o); });
this.Body.appendChild(oFragment);
},
//比較函數
Compare: function (order) {
var oThis = this;
return function (o1, o2) {
var value1 = oThis.GetValue(o1, order), value2 = oThis.GetValue(o2, order);
return value1 < value2 ? -1 : value1 > value2 ? 1 : 0;
};
},
//讀取比對值
GetValue: function (tr, order) {
var data = tr.getElementsByTagName("td")[order.Index].getAttribute(order.Attribute);
//數據
switch (order.DataType.toLowerCase()) {
case "int":
return parseInt(data) || 0;
case "float":
return parseFloat(data) || 0;
case "date":
return Date.parse(data) || 0;
case "string":
default:
return data.toString() || "";
}
},
//添加并返回一行排序對象
Add: function (index, options, isSort) {
var oThis = this;
return new function () {
//默認性
this.Attribute = "innerHTML"; //讀取數据的類性
this.DataType = "string"; //數据類型
isSort ? this.Down = true : this.Down = false; //是否按排序 this.Down = false;
Object.extend(this, options || {});
//排序對象
this.Index = index;
this.Sort = function () { oThis.Sort(this); };
};
}
}
var SetOrder = function (objs, index, to, options, isSort) {
var o = obj(objs);
//添加一行排序對象
var order = to.Add(index, options, isSort);
o.onclick = function () {
//取相反排序
order.Down = !order.Down;
//設置樣式
Each(SetOrder._arr, function (o) { o.className = ""; })
o.className = order.Down ? "down" : "up";
//排序樣示
order.Sort();
///图片样式
isSortAddIamgeClass(order.Down, o);
return false;
}
//_arr是裡面排序數目
SetOrder._arr ? SetOrder._arr.push(o) : SetOrder._arr = [];
isSortFun(isSort, o);
}
function isSortFun(isSort, o) {
switch (isSort) {
case true:
case false:
o.onclick();
break;
default:
break;
}
}
///圖片變化
function isSortAddIamgeClass(isSort, o) {
switch (isSort) {
case true:
SortAddImageId("class_arrow_down", o);
break;
case false:
SortAddImageId("class_arrow_up", o);
break;
default:
break;
}
}
//添加圖片
function SortAddImageId(class_arrow, o) {
if (o.children.length > 0) {
o.removeChild(obj(o.id + "class_arrow_id"));
}
var span = document.createElement("span");
span.setAttribute("class", class_arrow);
span.setAttribute("id", o.id + "class_arrow_id");
o.appendChild(span);
}
///事件配置
window.onload = function()
{
var to = new TableOrder("idList"); ///需要排序的tbodyID
/// 1.事件觸發對象 2.是哪一列 {3.需要排序的屬性對象,數據類型} 4.默認排序 true 為升序|false 為降序 |"" 不排序
SetOrder("CompanyCode", 1, to, { Attribute: "sort", DataType: "string" }, false);
}
///表单代码
.class_arrow_up { background-image: url('../Image/trigger-up.png'); background-repeat: no-repeat; width: 10px; height: 7px; background-position: center center; display: inline-block; }
.class_arrow_down { background-image: url('../Image/trigger-arrow.png'); background-repeat: no-repeat; width: 10px; height: 7px; background-position: center center; display: inline-block; }
<table>
<thead>
<tr>
<td><a id="CompanyCode" herf="javascript:void(0)">点击我排序</a></td> </tr>
</thead>
<tbody id="idList">
<tr>
<td sort="af">排序</td> </tr>
</tbody>
</table>
纯JS操作服务器绑定控件(Repeat)实现表头升降排序的更多相关文章
- js操作Attribute,控件的各种属性.....maxlength,style...
Attribute是属性的意思,文章仅对部分兼容IE和FF的Attribute相关的介绍. attributes:获取一个属性作为对象 getAttribute:获取某一个属性的值setAttribu ...
- WebForm服务器验证控件与前端js自定义验证共同使用
问题: 前端aspx页面中需要在button中添加OnClientClick事件后,这个OnClientClick所执行的自定义的客户端js验证:这个时候,所有的服务器验证控件都会失效! ...
- JS与APP原生控件交互
"热更新"."热部署"相信对于混合式开发的童鞋一定不陌生,那么APP怎么避免每次升级都要在APP应用商店发布呢?这里就用到了混合式开发的概念,对于电商网站尤其显 ...
- [js开源组件开发]js多选日期控件
js多选日期控件 详情请见:http://www.lovewebgames.com/jsmodule/calendar.html 它的github地址:https://github.com/tianx ...
- asp.net学习之 数据绑定控件--表格绑定控件
原文:asp.net学习之 数据绑定控件--表格绑定控件 数据绑定 Web 服务器控件是指可绑定到数据源控件,以实现在 Web 应用程序中轻松显示和修改数据的控件.数据绑定 Web 服务器控件 ...
- js插件---Bootstrap 树控件
js插件---Bootstrap 树控件 一.总结 一句话总结:可以直接用gojs,或者搜索js,jquery的树控件,或者bootstrap树控件,一大堆 gojs 二.JS组件系列——Bootst ...
- 开发类似"音速启动"的原创工具简码"万能助手"的过程中对ztree.js与win标准控件treeview、HTMLayout树形框等优缺点的比较
在开发类似"音速启动"的桌面快捷方式管理软件简码"万能助手"的早期规划中,曾经考虑过几种树形框方案: ztree.js.win标准控件treeview.HTML ...
- js进阶 9-10 html控件如何实现点击自动选择控件内容
js进阶 9-10 html控件如何实现点击自动选择控件内容 一.总结 一句话总结: 1.在click事件中,如果focus,那就select 2.blur 1.html中控件添加两种方式? 在表单 ...
- Dev控件GridView单元格绑定控件
Dev控件GridView单元格绑定控件 //文本按钮 RepositoryItemButtonEdit btnFields = new RepositoryItemButtonEdit();//创建 ...
随机推荐
- 【暑假】[实用数据结构]范围最小值问题(RMQ)
范围最小值问题: 提供操作: Query(L,R):计算min{AL ~ AR } Sparse-Table算法: 定义d[i][j]为从i开始长度为2j的一段元素的最小值.所以可以用递推的方法表示. ...
- HDU4553 约会安排
http://www.mamicode.com/info-detail-422707.html 线段树区间覆盖,开两个线段树,一个记录DS,一个NS // #pragma comment(linker ...
- 第二百五十一天 how can I 坚持
hadoop,namenote和datanode.namenode如果要是在启动时加载到内存,会不会对内存的要求比较高呢. edits-->fsimage. secondnamenode,那么n ...
- javascript中sleep等待实现
function sleep(milliSeconds) { var startTime = new Date().getTime(); while (new Date().getTime() < ...
- iOS 将图片保存到本地
//将图片保存到本地 + (void)SaveImageToLocal:(UIImage*)image Keys:(NSString*)key { NSUserDefaults* prefer ...
- 关于ssh和ajax小小总结
我是相当的不专业,写给自己看.有什么错误的话,说出来将感激不尽. 有两种方法异步传输 1.通过json字符串: jsp中这么写: $.getJSON( "details_ajaxActio ...
- PHP- Windows无法在本地计算机启动Apache的解决方法
装好了WAMP,开始可以进行我的PHP学习了.可是装后却打不开locahost. 百度后如下解决了:"Windows不能在本地计算机启动Apache2.有关更多信息,查阅系统事件日志.如果这 ...
- ListCtrl控件的使用
list contrl控件的使用 .建立基于对话框的应用程序,布置界面,设置属性. 注意添加的是listctrl控件,不是listbox控件,在控件工具箱的倒数第五行list control控件. 属 ...
- 如何在Visual Studio中选择C++和C#的编译器版本
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何在Visual Studio中选择C++和C#的编译器版本.
- [c++]堆和栈的区别
堆和栈的区别一.预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构 ...