コード: ネチズンが書いたコードをコピーしました。どこから来たのかは覚えていませんが、中国語の並べ替えと制御値の並べ替えをサポートするために変更されました。 仕方が無い、私の能力には限界がある、私にはそれしか出来ない。 。 。
//コンバーター、フィールドの型を変換します。列を並べ替え可能な型: 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)); :
return sValue.toString();
}
}
// 漢字ソートメソッド
function chrComp(a,b)
{
return a.localeCompare( b);
}
//ソート関数ジェネレーター
functiongenerateCompareTRs(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); oTR2.cells[ iCol].firstChild.nodeValue, sDataType);
}
if(sDec=='desc')
{
if(sDataType=='int')
{
return vValue1 == vValue2 ? 0 :(vValue1 - vValue2 }
else if(sDataType =='cn')
{
if (chrComp(vValue1 ,vValue2)>0)
{
return -1;
}
else if(chrComp(vValue1,vValue2){
return 1;
}
else
{
return 0;
}
}
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; >}
}
}
};
}
//セルのクラス名をリセットします
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
}
}
/*Sort メソッド (main 関数)
sTableID テーブル ID
iCol は列インデックス
1 (入力でない場合) を表しますtype、iCol は tr の td を表します。
2、入力タイプの場合、iCol は tr の入力を示します。
sDataType はセルのデータ型または入力の値のデータ型を示します。 . . デフォルトは文字列ですが、int、float も可能です。 cn は中国語です。
isinput は、ソートされたコンテンツが入力されているかどうかを示します (1 はい、0 はいいえ)。
sDec は逆順または順序を示します (desc、デフォルトの順序)。 )、入力を避けるため 値を変更すると、ソート時に順序が直接逆になります。
*/
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
{
aTRs[i] =colDataRows[i];
}
aTRs.sort(generateCompareTRs(iCol, sDataType,isinput, sDec));
var oFragment = document.createDocumentFragment( );
for (var i=0; i {
oFragment.appendChild(aTRs[i]);
ChangeClsName(aTRs[i],i) ;
}
oTBody.appendChild(oFragment);
}
今週は、ずっと学びたかった jquery を勉強する時間がついにありました。会社で使えないのは残念ですが、実際、習った後でも使えると感じています。 jqery を知った後、他の人のプラグインを見てみました。 jquery.tablesorter.js このプラグインは非常に強力です。試してみたところ、中国語には対応していないことが分かりました。 ソース コードを見ると、
コードをコピーします
/* ソートメソッド */
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 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 dynamicExp = "}; ";
}
dynamicExp = "0 を返す; ";
dynamicExp = "}; ";
eval(dynamicExp);
cache.normalized.sort(sortWrapper);
if(table.config.debug) { benchmark("sortList.toString() " および dir " order " time:" での並べ替え:", sortTime); }
キャッシュを返します。
};
function sortText(a,b) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
};
function sortTextDesc(a,b) {
return ((b < a) ? -1 : ((b > a) ? 1 : 0));
};
関数 sortNumeric(a,b) {
return a-b;
};
関数 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);
};
テストは次のとおりです。の才9kb、私だけがjquery.tablesorter.js(23kb)を変更します。要はjquery.tablesorter.pack.jsに変更を加えます。必要な拡張機能、たとえば、多数の配列、さまざまなサンプルなどを参照できます。