Home > Article > Web Front-end > jquery implements sorting according to Chinese tables
This time I will bring you jquery to sort according to Chinese tables. What are the precautions for jquery to sort according to Chinese tables? The following is a practical case, let's take a look.
//转换器,将列的字段类型转换为可以排序的类型:String,int,float function convert(sValue, sDataType) { switch(sDataType) { case "int": return parseInt(sValue); case "float": return parseFloat(sValue); case "date": return new Date(Date.parse(sValue)); default: return sValue.toString(); } } // 汉字排序方法 function chrComp(a,b) { return a.localeCompare(b); } //排序函数产生器 function generateCompareTRs(iCol, sDataType,isinput,sDec) { return function compareTRs(oTR1, oTR2) { if(isinput == 1) { var vValue1 = convert(oTR1.getElementsByTagName("input")[iCol].value); var vValue2 = convert(oTR2.getElementsByTagName("input")[iCol].value); } else { var vValue1 = convert(oTR1.cells[iCol].firstChild.nodeValue, sDataType); var vValue2 = convert(oTR2.cells[iCol].firstChild.nodeValue, sDataType); } if(sDec=='desc') { if(sDataType=='int') { return vValue1 == vValue2 ? 0 :(vValue1 - vValue2 <0 ? 1 : -1); } else if(sDataType =='cn') { if(chrComp(vValue1,vValue2)>0) { return -1; } else if(chrComp(vValue1,vValue2)<0) { return 1; } else { return 0; } } else { if (vValue1 > vValue2) { return -1; } else if (vValue1 < vValue2) { return 1; } else { return 0; } } } else if(sDec=='asc') { if(sDataType=='int') { return vValue1 == vValue2 ? 0 :(vValue1 - vValue2 >0 ? 1 : -1); } else if(sDataType =='cn') { return chrComp(vValue1,vValue2); } else { if (vValue1 > vValue2) { return 1; } else if (vValue1 < vValue2) { return -1; } else { return 0; } } } }; } //重置单元格的classname function ChangeClsName(tr,num) { num = num%2?1:2; num.toString(); for ( var i = 0 ; i < tr.childNodes.length; i ++ ) { tr.childNodes[i].className = "row" + num } } /*排序方法(主函数)sTableID table ID
iCol represents the column index
1, when it is not an input type, iCol represents the td of tr;
2, when it is an input type , then iCol represents the input number in this tr;
sDataType represents the
data type of the cell or the data type of the value of the input. The default is string, but it can also be int, float. cn Is Chinese isinput indicates whether the sorted content is input (1 yes, 0 no)
sDec indicates reverse order or order (desc, default order), to avoid direct reverse order when sorting after the input value changes.
*/ function sortTable(sTableID, iCol, sDataType, isinput, sDec) { var oTable = document .getElementById(sTableID); var oTBody = oTable.tBodies[0]; var colDataRows = oTBody.rows; var aTRs = new Array; //将所有列放入数组 for (var i=0; i < colDataRows.length; i++) { aTRs[i] = colDataRows[i]; } aTRs.sort(generateCompareTRs(iCol, sDataType,isinput, sDec)); var oFragment = document.createDocumentFragment(); for (var i=0; i < aTRs.length; i++) { oFragment.appendChild(aTRs[i]); ChangeClsName(aTRs[i],i); } oTBody.appendChild(oFragment); }This week I finally have time to study jquery, which I have always wanted to learn. It's a pity that the company can't use it. In fact, after learning it, I still feel that it can be used. After knowing jqery, I looked at other people's plug-ins. jquery.tablesorter.js This plug-in is quite powerful. I tried it and found that it does not support Chinese. Look at the source code and it says
/* sorting methods */ function multisort(table,sortList,cache) { if(table.config.debug) { var sortTime = new Date(); } var dynamicExp = "var sortWrapper = function(a,b) {", l = sortList.length; for(var i=0; i < l; i++) { var c = sortList[i][0]; var order = sortList[i][1]; var s = (getCachedSortType(table.config.parsers,c) == "text") ? ((order == 0) ? "sortText" : "sortTextDesc") : ((order == 0) ? "sortNumeric" : "sortNumericDesc"); var e = "e" + i; dynamicExp += "var " + e + " = " + s + "(a[" + c + "],b[" + c + "]); "; dynamicExp += "if(" + e + ") { return " + e + "; } "; dynamicExp += "else { "; } for(var i=0; i < l; i++) { dynamicExp += "}; "; } dynamicExp += "return 0; "; dynamicExp += "}; "; eval(dynamicExp); cache.normalized.sort(sortWrapper); if(table.config.debug) { benchmark("Sorting on " + sortList.toString() + " and dir " + order+ " time:", sortTime); } return cache; }; function sortText(a,b) { return ((a < b) ? -1 : ((a > b) ? 1 : 0)); }; function sortTextDesc(a,b) { return ((b < a) ? -1 : ((b > a) ? 1 : 0)); }; function sortNumeric(a,b) { return a-b; }; function sortNumericDesc(a,b) { return b-a; }; function getCachedSortType(parsers,i) { return parsers[i].type; };At first I thought I would encounter some difficulties. Unexpectedly, I only need to change his sorting function and it will be ok.
function sortText(a,b) { return a.localeCompare(b); }; function sortTextDesc(a,b) { return -a.localeCompare(b); };Test it. Chinese, Chinese and English together, if there are columns in the middle, it will be no problem.
Originally, this plug-in has jquery.tablesorter.pack.js which is only 9kb after compression, but I will only change jquery.tablesorter.js (23kb). I don't know how to turn it into jquery.tablesorter.pack.js.
ps: Of course, this plug-in also has many extended functions, such as multi-column sorting, various examples, etc. There are documents for reference.
jquery implements table paging and sorting
jQuery cross-domain iframe interface call (with code)
The above is the detailed content of jquery implements sorting according to Chinese tables. For more information, please follow other related articles on the PHP Chinese website!