0

カロン文字(š、ž、č、ć、đ、...)をソートしたいとき、jqGridに問題があります。「caronCharacters」関数を使用して、これらのキャロンをコードに置き換えます...caronCharacters(data, sortableColumns[sortIndex], false);コメントの場合、並べ替えは問題ありません..しかし、その場合、単語内にキャロンはありませんが、代わりに「zxxx」コードがあります...しかし、置換したい場合このコードをキャロン文字に戻すと、何もしなかった場合と同じ結果になります...トリガー「reloadGrid」がデータを再度ソートすると思います...理解してください...

$('#sortAZ,#sortZA').click(function(){
    var order='asc';
    if ($(this).attr('id')=='sortZA'){
        var order='desc';
    }
    if (sortIndex==''){
        return;
    }
    // change caron character into some code..like zž or zxxx
    var data = $('#gridTable').jqGrid('getGridParam').data;

    caronCharacters(data, sortableColumns[sortIndex], true);
    jQuery("#gridTable").jqGrid('setGridParam',{sortname:sortableColumns[sortIndex],sortorder:order});

    // change code back to caron...if next line is in comment it works sorting, but no carons...
    caronCharacters(data, sortableColumns[sortIndex], false);
    jQuery("#gridTable").trigger('reloadGrid');
    $('#dropMenuFilter').hide();

    function caronCharacters(data, sortableColumn, direction){
        if(direction){
            for(var i in data){
                data[i][sortableColumn] = replaceCaron(data[i][sortableColumn]);
                $('#gridTable').jqGrid('getLocalRow', i)[sortableColumn] = data[i][sortableColumn];
            }
        }
        else{
            for(var i in data){
                data[i][sortableColumn] = replaceCaronCode(data[i][sortableColumn]);
                $('#gridTable').jqGrid('getLocalRow', i)[sortableColumn] = data[i][sortableColumn];
            }
        }
    }
});

function replaceCaron(word){
    word = word.replace(/Č/g, "Cxxx");
    word = word.replace(/Ć/g, "Cxxx");
    word = word.replace(/Đ/g, "Dxxx");
    word = word.replace(/Š/g, "Sxxx");
    word = word.replace(/Ž/g, "Zxxx");
    word = word.replace(/č/g, "cxxx");
    word = word.replace(/ć/g, "cxxx");
    word = word.replace(/đ/g, "dxxx");
    word = word.replace(/š/g, "sxxx");
    word = word.replace(/ž/g, "zxxx");
    return word;
}

function replaceCaronCode(word){
    word = word.replace(/Cxxx/g, "Č");
    word = word.replace(/Cxxx/g, "Ć");
    word = word.replace(/Dxxx/g, "Đ");
    word = word.replace(/Sxxx/g, "Š");
    word = word.replace(/Zxxx/g, "Ž");
    word = word.replace(/cxxx/g, "č");
    word = word.replace(/cxxx/g, "ć");
    word = word.replace(/dxxx/g, "đ");
    word = word.replace(/sxxx/g, "š");
    word = word.replace(/zxxx/g, "ž");
    return word;
}
4

1 に答える 1

1

あなたの要件を正しく理解できれば、次の 2 つの方法のいずれかで問題を解決できます。

  • sorttype関数として定義された使用法によるカスタムソートを実装します。例を提供する回答を参照してください。
  • 比較または文字列中に jqGrid によって使用される「サブクラス」内部メソッド。対応する例については、別の回答を参照してください。
于 2012-10-29T15:43:03.827 に答える