- 浏览: 59003 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
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 4275最近终于找到些google docs的实现相关文章与代码, 之 ... -
JS Extend
2011-06-22 14:01 0<script language="Java ... -
使用hta解析网页,并上传结果至FTP
2011-05-28 10:42 2405HTA介绍详见http://en.wikipedia.org/ ... -
兼容IE,火狐的自定义tips,浮动显示文字
2010-04-21 13:21 1577大部分代码来自网络,可以在自己的页面定义变量qTipTag名称 ... -
js操作table元素,表格的行列新增、删除汇集
2010-04-21 13:12 7302直接上代码,如何表格 ... -
trim replaceAll
2010-04-21 13:00 1101一、trim空格 <SCRIPT LANGUAGE=& ... -
Script 学习
2009-11-11 14:40 1023最近学习Script脚本比较 ...
相关推荐
5. **多列排序**:对于复杂的排序需求,如多列排序,我们需要记录当前的排序列和方向,并在点击新列时更新这些状态。同时,可能需要实现稳定的排序算法,以保持相同值的原始顺序。 6. **性能优化**:如果表格数据量...
本主题"Div仿制table送自定义Scrollbar支持排序"正是探讨这种技术的应用。 首先,Div仿制table是通过CSS布局(如Flexbox或Grid)和JavaScript来构建一个看起来和表格类似的结构,这样可以更灵活地控制单元格的样式...
"Table排序"主要是指对HTML `<table>`元素中的数据行依据某一列或多列进行升序或降序排列。在JavaScript中,我们可以直接操作DOM(Document Object Model)来实现这一功能。SortTable.js库通过监听用户的点击事件,...
- **多列排序**:支持多列排序,可以通过多次点击不同的表头来切换排序依据。 - **自定义排序**:如果内置的排序规则不能满足需求,可以提供自定义排序函数,对特定列的数据进行特殊处理。 - **反馈视觉效果**:...
6. **多列排序**:如果需要支持多列排序,可以添加额外的逻辑来处理排序优先级。例如,可以保存一个排序顺序列表,当用户点击新的列时,将该列添加到列表头部,而其他列的顺序保持不变。 7. **自定义排序**:有时,...
6. **多列排序**:复杂情况下,表格可能需要支持多列排序。在这种场景下,需要记录用户的排序选择,并按顺序应用每列的排序规则。 7. **自定义排序规则**:JavaScript的`sort()`函数默认按照字符串的字母顺序排序,...
1. **多列排序**:允许用户根据一列或多列的数据进行升序或降序排序。 2. **动态排序**:用户只需点击表头,即可实时更新表格的排序状态。 3. **自定义排序规则**:对于特定类型的列(如日期、数字、字符串),可以...
5. **多列排序**:高级的库可能支持多列排序,允许用户按多个字段排序,如先按年龄升序,再按名字降序。 6. **性能优化**:由于DOM操作可能会有性能影响,优秀的库会使用虚拟DOM或者最小化DOM操作次数来提升性能。 ...
总结,"js 表格排序"涉及到的技术包括HTML表格结构、JavaScript事件处理、jQuery操作DOM、第三方库的使用(如Datatables)、自定义排序逻辑以及前端性能优化。通过学习和实践这些知识,开发者可以为ASP.NET应用构建...
6. **多列排序**:在描述中提到的“多列表格排序”意味着用户可以同时按照多个字段进行排序。实现这一功能需要维护一个排序优先级列表,每次点击列头时,根据当前的排序规则决定是添加新排序条件还是改变现有排序。 ...
在JavaScript(JS)中,实现表格排序功能是前端开发中常见的需求,特别是在处理大量数据时。这个功能使得用户可以通过点击表头对数据进行升序或降序排列,提高数据查看和分析的效率。下面我们将详细探讨如何实现这样...
"table 列可左右拖动"的功能使得用户可以根据需要调整列宽,提高用户体验,特别是当表格内容较多,需要横向滚动条时,用户可以更方便地查看和操作表格。 实现这一功能通常涉及以下几个关键知识点: 1. **...
需要注意的是,实际项目中可能需要考虑更多细节,例如防止多次拖动操作导致的数据混乱,以及兼容不同浏览器的差异。此外,为保持良好的用户体验,可能还需要添加过渡动画和拖动指示器等。通过以上的实现方式,你可以...
sorttable库支持自定义排序函数,这意味着你可以根据具体的数据类型和业务需求来定制排序规则。例如,对于日期、货币或包含特殊格式的文本,可以通过注册新的比较函数来确保正确的排序顺序。 **5. 兼容性和性能** ...
`tablesort.js` 库允许开发者通过添加一些自定义属性或类来扩展HTML表格的功能,使得用户可以按任意列进行排序,甚至支持自定义排序规则。例如,我们可以为表头单元格添加`data-sort`属性来指定排序依据,或者使用`...
1. **多列排序**:jquery.tableSort.js支持多列同时排序,用户可以通过点击不同的表头实现对多个字段的排序。 2. **自动检测数据类型**:插件会自动识别表格单元格中的数据类型(如数字、日期、字符串等),并根据...
为了提高代码的可复用性和适应性,可以封装成一个插件或组件,支持自定义排序逻辑和兼容各种浏览器。同时,考虑使用ES6的类和模块化来提升代码组织性。 通过以上介绍,你已经了解了JS中实现表格排序的基本思路和...
通过理解表格元素的特性和JavaScript对DOM的操作,可以实现更复杂的表格功能,例如多列排序、自定义排序规则等。对于初学者来说,这是一个很好的实践项目,能够帮助理解HTML与JavaScript的交互以及DOM操作的原理。