Javascript jqGrid-caron排序

Javascript jqGrid-caron排序,javascript,jquery,sorting,jqgrid,Javascript,Jquery,Sorting,Jqgrid,当我希望对caron字符(š,ž,č,ć,đ,…)排序时,我对jqGrid有问题。 我使用“caronCharacters”函数用代码替换那些caron。。。 当caronCharacters(数据,sortableColumns[sortIndex],false)时在coment中,排序是可以的。但是在这种情况下,我们在单词中没有caron,而是一些“zxxx”代码…但是当我希望将此代码替换回caron字符时,我得到了相同的结果,就像我没有做任何事情一样…我想触发器“reloadGrid”再次

当我希望对caron字符(š,ž,č,ć,đ,…)排序时,我对jqGrid有问题。 我使用“caronCharacters”函数用代码替换那些caron。。。 当
caronCharacters(数据,sortableColumns[sortIndex],false)时在coment中,排序是可以的。但是在这种情况下,我们在单词中没有caron,而是一些“zxxx”代码…但是当我希望将此代码替换回caron字符时,我得到了相同的结果,就像我没有做任何事情一样…我想触发器“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;
}

如果我正确理解您的要求,您可以通过以下两种方式之一解决问题:

  • 按定义为函数的用法
    sorttype
    实现自定义排序。请参见下面的示例
  • jqGrid在比较或字符串时使用的“subclass”内部方法。有关相应的示例,请参见

您是将jqGrid与
数据类型:“local”
一起使用,还是将一些远程数据类型(“json”或“xml”)与
loadonce:true一起使用?什么是
'#sortAZ'
'#sortZA'
?通过单击列标题进行的标准排序将与您的自定义排序规则相对应,这不是更好吗?我使用远程数据类型json。是的,可能更好,但我不能使用souch排序…这不是我必须实现的设计…如果使用
datatype:“json”
而不使用
loadonce:true
,那么所有排序都将在服务器端完成。因此,不需要编写任何额外的JavaScript代码,只需更改服务器代码或使用对应SQL语句中按部分顺序排列的COLLATE part(参见示例)