jquery tablesorter.js 중국어 표 정렬 개선 지원

코드:한 네티즌 의 코드 를 모방 하여 썼 습 니 다.어디서 나 왔 는 지 기억 이 나 지 않 습 니 다.중국어 정렬 을 지원 할 수 있 고 컨트롤 value 의 정렬 을 지원 합 니 다.어 쩔 수 없어,능력 에 한계 가 있어,할 수 밖 에 없어..
 
// , :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 id
iCol
1, input ,iCol tr td;
2, input , iCol tr input;
sDataType cell input value . string, int, float. cn
isinput input(1 , 0 )
sDec (desc, ), input 。
*/
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);
}
이번 주 에 드디어 jquery 를 연구 할 시간 이 생 겨 서 배우 고 싶 었 어 요.안 타 깝 게 도 회 사 는 쓸 수 없 었 다.사실은 배 운 후에 도 쓸 수 있다 고 생각 했다.jqery 를 알 고 다른 사람의 플러그 인 을 보 았 습 니 다.jquery.tablesorter.js 이 플러그 인 기능 은 매우 강하 다.해 보 니 중국 어 는 지원 되 지 않 는 다.소스 코드 를 보면
 
/* 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;
};
처음에는 어려움 을 겪 을 줄 알 았 는데.생각 지도 못 했 어,나 는 단지 그의 정렬 함 수 를 좀 고치 기만 하면 돼
 
function sortText(a,b) {
return a.localeCompare(b);
};
function sortTextDesc(a,b) {
return -a.localeCompare(b);
};
테스트 해 봐.중국어,중국어,영어 와 함께 중간 에 빈 칸 으로 열거 하 는 것 도 문제 가 없다.원래 이 플러그 인 은 jquery.tablesorter.pack.js 가 압축 된 후에 9kb 밖 에 되 지 않 았 지만 저 는 jquery.tablesorter.js(23kb)만 고 칠 수 있 습 니 다.어떻게 jquery.tablesorter.pack.js 로 바 꿔 야 할 지 모 르 겠 어 요.ps:물론 이 플러그 인 은 여러 열 정렬,여러 가지 예 등 문서 가 참고 할 수 있 는 확장 기능 도 많 습 니 다.원본 과 예 는 인터넷 에 많 을 겁 니 다.필요 한 구두 가 있 으 면 메 일 로 남 겨 주세요.

좋은 웹페이지 즐겨찾기