Javascript jqGrid-caron排序
当我希望对caron字符(š,ž,č,ć,đ,…)排序时,我对jqGrid有问题。 我使用“caronCharacters”函数用代码替换那些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”再次
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(参见示例)