- 浏览: 58022 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
wilhard:
开发一个函数,在html中js调用应该怎么搞
VB6.0 开发的ocx应用于Web、C#桌面应用程序 的摸索. -
kly377:
试了毫无反应...
js的table排序,支持多浏览器,多列同时排序,自定义排序 -
jack_guan_7:
有点看不懂,能不能多给点注释。
java 反射 取值、设值 -
s_STEFANIE_s:
谢谢分享,对我很有帮助!
Java与C++通信尝试 Socket通信方式 -
qing2888:
hi..你好。。。有电话或者qq联系方式么?想请教你关于goo ...
一个老外提供的google docs代码。 看着蛋疼..
简单且轻松自定义排序规则:
1.initSortTable(asc,desc);是初始化排序预操作(其实就是传入两张图片地址,标识排序方向的)
2.在需要排序的表格table上添加监听事件,sortColumn();此处被我限定click事件作用在th对象上才有效的。
3.需要按列制定排序规则,即在th上添加type类型,例如<th type='string'>1</th>; 如果想要二重排序的话写成<th type='string,0'>1</th>,0标识列号,即本列排序时如果排序内容相同,则按照第零列排序。
4.这里的排序规则可以自由定义,当然目前的代码中只是传入了td单元格内容innerText值,也就是显示的文字。(不过你也可以修改下,传入一个对象)
可能文字描述不直观,附上一个例子吧:
<html> <head> <title>sorttest</title> <script type="text/javascript" src="javascript/table-sort.js"></script> </head> <script > function init(){ initSortTable("images/tablesorter/desc.gif","images/tablesorter/asc.gif"); } </script> <body onload='init();'> <table onclick="sortColumn(event)"> <thead> <tr> <th NOWRAP type="Number">ID</th> <th NOWRAP type="myDate,0">Date</th> <th NOWRAP type="str,0">Org</th> <th NOWRAP type="str,0">Dest</th> <th NOWRAP type="bool,0">Flip</th> <th NOWRAP type="ip,0">IP</th> </tr> </thead> <tbody> <tr> <td NOWRAP><%=id %></td> <td nowrap><%=date %></td> <td NOWRAP><%=org %></td> <td NOWRAP><%=dest %></td> <td NOWRAP><%=flip %></td> <td NOWRAP><%=ip %></td> </tr> </tbody> <table> </body> </html>
具体代码如下,里面包含了一下我自定义处理,比较撮。
var dom = (document.getElementsByTagName) ? true : false; var ie5 = (document.getElementsByTagName && document.all) ? true : false; var arrowUp, arrowDown; var mydefinedChar = "*"; //if (ie5 || dom) //initSortTable(); function initSortTable(asc,desc) { arrowUp = document.createElement("SPAN"); arrowUp.style.display = "inline"; var img = document.createElement("Img"); img.src = asc; arrowUp.appendChild(img); arrowUp.className = "arrow"; arrowDown = document.createElement("SPAN"); arrowDown.style.display = "inline"; img = document.createElement("Img"); img.src = desc; arrowDown.appendChild(img); arrowDown.className = "arrow"; } function sortTable(tableNode, nCol, bDesc, sType) { var tBody = tableNode.tBodies[0]; var trs = tBody.rows; var trl= trs.length; var a = new Array(); for (var i = 0; i < trl; i++) { a[i] = trs[i]; } var start = new Date; window.status = "Sorting data..."; a.sort(compareByColumn(nCol,bDesc,sType)); window.status = "Sorting data done"; for (var i = 0; i < trl; i++) { tBody.appendChild(a[i]); window.status = "Updating row " + (i + 1) + " of " + trl + " (Time spent: " + (new Date - start) + "ms)"; } // check for onsort if (typeof tableNode.onsort == "string") tableNode.onsort = new Function("", tableNode.onsort); if (typeof tableNode.onsort == "function") tableNode.onsort(); } function CaseInsensitiveString(s) { return String(s).toUpperCase(); } function parseDate(s) { return Date.parse(s.replace(/\-/g, '/')); } function toNumber(s) { return Number(s.replace(/[^0-9\.]/g, "")); } function Percent(s) { return Number(s.replace("%", "")); } function dostr(s){ return String(s).toUpperCase(); } function donum(val){ var s1 = ""; var s2 = ""; var s = val; try{ if(val.indexOf("(")!=-1){ s = val.substring(0, val.indexOf("(")); s1 = val.substring(val.indexOf("(")+1, val.indexOf(")")); } if(s.indexOf("+")!=-1){ s = s.substring(0,s.indexOf("+")); } if(s1 != "") { var splitChar = ""; if(s1.indexOf("-")!=-1) splitChar = "-"; else if(s1.indexOf("+")!=-1) splitChar = "+"; else if(s1.indexOf("<")!=-1) splitChar = "<"; else if(s1.indexOf(">")!=-1) splitChar = ">"; if(splitChar!="") { s2 = s1.split(splitChar)[1]; s1 = s1.split(splitChar)[0]; } } }catch(e){} var rel = fillzero(s.Trim(),5)+fillzero(s1.Trim(),5)+fillzero(s2.Trim(),5); return rel; } function dobool(s) { var val = 2; if(s.toUpperCase() == "Y") val = 0; else if(s.toUpperCase() == "N") val = 1; return val; } function doboolfull(s) { var val = 2; if(s.toUpperCase() == "YES") val = 1; else if(s.toUpperCase() == "NO") val = 0; return val; } function dolastname(s){ if(s.indexOf(",")!=-1){ s = s.substring(0,s.indexOf(",")); } return CaseInsensitiveString(s); } function doip(s){ var sArr = s.split("."); for(var i=0;i<sArr.length;i++) { if(sArr[i] == "*"){ sArr[i] = "999"; }else { sArr[i] = fillzero(sArr[i],3); } } return sArr.join(","); } function fillzero(s,num) { var n = s.length; while(n < num) { s = "0"+s; n++; } return s; } function doStrNum(s) { var nVal = 9999; var parrent = /^[0-9]*$/; if(s.length <= 0){ nVal = -1; } if(s != "" && parrent.test(s)){ nVal = parseInt(s); } return nVal; } function getFraudStatus(s) { if(s == "") return s; var ss3 = s.Trim().toLowerCase(); if(s.Trim().length > 18){ var ss2 = s.Trim().substring(18); //var ss1 = s.Trim().substring(0,18); if(ss2.indexOf("/")!=-1){ if(s.indexOf("Fraud") == 0){ ss3 = s.Trim().toLowerCase(); }else { ss3 = ss2.substring(0,ss2.indexOf("/")-2).Trim().toLowerCase(); } //ss1 = ss1.substring(5,10)+ss1.substring(0,5)+ss1.substring(10); } else { ss3 = ss2.Trim().toLowerCase(); } } if(ss3 == "fraud pending warning" || ss3 == "warning") ss3 = "0"; else if(ss3 == "fraud pending watch" || ss3 == "watch") ss3 = "1"; else if(ss3 == "fraud confirmed") ss3 = "2"; s = ss3.Trim(); return s; } /** */ String.prototype.replaceAll = function(regExp, repText){ return this.replace(new RegExp(regExp,"g"),repText); } String.prototype.Trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ""); } function convertMonthStrToNumberStr(s){ s = s.toLowerCase(); if(s == "jan") s = "01"; else if(s == "feb") s = "02"; else if(s == "mar") s = "03"; else if(s == "apr") s = "04"; else if(s == "may") s = "05"; else if(s == "jun") s = "06"; else if(s == "jul") s = "07"; else if(s == "aug") s = "08"; else if(s == "sep") s = "09"; else if(s == "oct") s = "10"; else if(s == "nov") s = "11"; else if(s == "dec") s = "12"; return s; } //Formatter datetime is like "Apr 01, 2010 03:34 AM" function domyDate(s1) { var s = s1.Trim().replaceAll(",",""); var dateArr = s.split(" "); if(dateArr.length >= 5){ var year = dateArr[2]; var month = convertMonthStrToNumberStr(dateArr[0]); var day = dateArr[1]; var subday = dateArr[4].toLowerCase() == "pm"? 1 : 0; var time = dateArr[3]; //var timeArr = time.split(":"); //time = (timeArr[0] == "12" ? "00" : timeArr[0])+":"+timeArr[1]; return year+month+day+subday+time; } return s1; } //Only sort support two column. function compareByColumn(nCol, bDescending, strType) { var c = nCol; var d = bDescending; var typeArr = strType.split(","); var sType = typeArr[0]; var fTypeCast = String; if (sType == "Number") fTypeCast = Number; else if (sType == "Date") fTypeCast = parseDate; else if (sType == "CaseInsensitiveString") fTypeCast = CaseInsensitiveString; else if (sType == "Percent") fTypeCast = Percent; else if(sType == "num") fTypeCast = donum; else if(sType == "str") fTypeCast = dostr; else if(sType == "bool") fTypeCast = dobool; else if(sType == "lastname") fTypeCast = dolastname; else if(sType == "ip") fTypeCast = doip; else if(sType == "boolfull") fTypeCast = doboolfull; else if(sType == "StrNum") fTypeCast = doStrNum; else if(sType == "myDate") fTypeCast = domyDate; else if(sType == "fraudStatus") fTypeCast = getFraudStatus; return function (n1, n2) { var str1 = getInnerText(n1.cells[c]); var str2 = getInnerText(n2.cells[c]); var chk = specialChecking(str1,str2); if(chk != 0) { return chk; } var value1 = fTypeCast(getInnerText(n1.cells[c])); var value2 = fTypeCast(getInnerText(n2.cells[c])); if (value1 < value2) return d ? -1 : +1; if (value1 > value2) return d ? +1 : -1; return 0; }; } function specialChecking(str1,str2) { if(str1 == mydefinedChar && str2 != str1){ return +1; } if(str2 == mydefinedChar && str2 != str1){ return -1; } return 0; } function sortColumnWithHold(e) { var el = ie5 ? e.srcElement : e.target; var table = getParent(el, "TABLE"); var oldCursor = table.style.cursor; var oldClick = table.onclick; table.style.cursor = "wait"; table.onclick = null; var fakeEvent = {srcElement : e.srcElement, target : e.target}; window.setTimeout(function () { sortColumn(fakeEvent); table.style.cursor = oldCursor; table.onclick = oldClick; }, 100); } function sortColumn(e) { try{ var isSecondSortFlag = arguments[1]==undefined?false:arguments[1]; var tmp = e.target ? e.target : (e.srcElement?e.srcElement:e); var tHeadParent = getParent(tmp, "THEAD"); var el = getParent(tmp, "TH"); if (tHeadParent == null) { return; } if (el != null && el.getAttribute("type") != undefined) { var sortedType = el.getAttribute("type"); var typeArr = sortedType.split(","); if(typeArr.length > 1){ try{ var nextColumnIndex = parseInt(typeArr[1]); var tableObj = getParent(el, "TABLE"); var cellObj = tableObj.rows[0].cells[nextColumnIndex]; var descending = Boolean(cellObj._descending); if(descending == false){ sortColumn(cellObj,true); } }catch(e){ } } var p = el.parentNode; var i; var tmpDescFlag = true; if(isSecondSortFlag == false){ tmpDescFlag = !Boolean(el._descending); if(el._descending == null && el.getAttribute("_descending")!=undefined) { tmpDescFlag = (el.getAttribute("_descending") == "true"); } el._descending = tmpDescFlag; if (tHeadParent.arrow != null) { if (tHeadParent.arrow.parentNode != el) { tHeadParent.arrow.parentNode._descending = null; } tHeadParent.arrow.parentNode.removeChild(tHeadParent.arrow); } if (el._descending) tHeadParent.arrow = arrowUp.cloneNode(true); else tHeadParent.arrow = arrowDown.cloneNode(true); el.appendChild(tHeadParent.arrow); }else{ el._descending = null; } var cells = p.cells; var l = cells.length; for (i = 0; i < l; i++) { if (cells[i] == el) break; } var table = getParent(el, "TABLE"); sortTable(table,i,tmpDescFlag, el.getAttribute("type")); } }catch(e){}; } function getInnerText(el) { if (ie5) return el.innerText; var str = ""; var cs = el.childNodes; var l = cs.length; for (var i = 0; i < l; i++) { switch (cs[i].nodeType) { case 1: str += getInnerText(cs[i]); break; case 3: str += cs[i].nodeValue; break; } } return str; } function getParent(el, pTagName) { if (el == null) return null; else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) return el; else return getParent(el.parentNode, pTagName); }
朋友的网站 http://woods2010.cn.alibaba.com/ 专业电子器件代购
发表评论
-
一个老外提供的google docs代码。 看着蛋疼..
2011-08-19 17:49 4200最近终于找到些google docs的实现相关文章与代码, 之 ... -
JS Extend
2011-06-22 14:01 0<script language="Java ... -
使用hta解析网页,并上传结果至FTP
2011-05-28 10:42 2367HTA介绍详见http://en.wikipedia.org/ ... -
兼容IE,火狐的自定义tips,浮动显示文字
2010-04-21 13:21 1532大部分代码来自网络,可以在自己的页面定义变量qTipTag名称 ... -
js操作table元素,表格的行列新增、删除汇集
2010-04-21 13:12 7232直接上代码,如何表格 ... -
trim replaceAll
2010-04-21 13:00 1053一、trim空格 <SCRIPT LANGUAGE=& ... -
Script 学习
2009-11-11 14:40 975最近学习Script脚本比较 ...
相关推荐
主要的特点包括:多列排序支持文本、URL地址、数值、IP地址、日期类型,以及自定义类型排序支持 TH 元素的 ROWSPAN 和 COLSPAN 属性支持第二个隐藏域排序可扩展外观程序简小,打包后只有 7.4K程序效果: ...
9.9 JavaScript遍历table的行和列 9.10 表格按回车自动生成新行 9.11 单击单元格背景变色 9.12 单击表格某行后其他行隐藏 9.13 单击表头实现表格排序 9.14 单击单元格显示行的详细信息 9.15 表格设置为“100%”时...
9.9 JavaScript遍历table的行和列 9.10 表格按回车自动生成新行 9.11 单击单元格背景变色 9.12 单击表格某行后其他行隐藏 9.13 单击表头实现表格排序 9.14 单击单元格显示行的详细信息 9.15 表格设置为“100%”时...
Ex4.0共2个压缩包特性,《ext js权威指南》 前 言 第1章 ext js 4开发入门 / 1 1.1 学习ext js必需的基础知识 / 1 1.2 json概述 / 3 1.2.1 认识json / 3 1.2.2 json的结构 / 3 1.2.3 json的例子 / 4 1.2.4 ...
/js/all.js JavaScript脚本文件 /images 图片文件 第24章(/ch24) 程序描述:本章将使用Ajax技术实现无刷新即可浏览RSS的阅读器。添加一个RSS地址时,自动保存到数据库。打开阅读RSS时,自动获取...
110.如何在DataList控件中创建多个列 111.如何实现DataList控件的分页功能 112.如何在DataGrid中添加自动编号的功能 113.如何控制DataGrid绑定列绑定的数据类型为日期的显示格式 114.如何把DataGrid中某一列的...
9.9.3 设置可同时选中多行表格 183 9.9.4 可拖动的表格 184 9.9.5 设置单元格的图标 184 9.9.6 改变选中行高亮显示的颜色 185 9.9.7 带有上下文菜单的表格 186 9.9.8 可编辑的表格(TableEditor) 187 ...
如何在DataList控件中创建多个列 111.如何实现DataList控件的分页功能 112.如何在DataGrid中添加自动编号的功能 113.如何控制DataGrid绑定列绑定的数据类型为日期的显示格式 114.如何把DataGrid中某...
left、center、right),默认 left</p><p>[新增] table 组件的 escape 参数,用于是否开启 xss 字符过滤(默认 false)</p><p>[加强] table 组件的自定义模板功能,返回 LAY_COL 字段,可得到当前列的表头配置信息...
<class name="MyContent" table="jc_mycontent"> <meta attribute="sync-DAO">false</meta> <cache usage="read-write"/> <id name="id" type="java.lang.Integer" column="id"><generator class=...
第 1 章 JavaScript 是什么...............................................1 3 1.1 历史简述..............................................1 1.2 JavaScript 实现................................................