如何使用jQuery按字母顺序和不区分大小写地排序数据表?

5

我正在使用jQuery Datatable。它会显示用户列表(名字、姓氏等)。当我点击姓氏的升序排列时,是否可以设置为大写字母始终出现在小写字母之前。(区分大小写)

以下是示例:

FirstName   LastName
A             Xb   <--X is Captial-->
B             xa   <-- x is small-->
c             yc

当我点击以姓氏为排序依据并按升序排列时,它会显示以下内容:
 FirstName   LastName

B             xa   <--small-->
A             Xb   <--X is Captial-->
c             yc

有没有可以区分大小写的排序属性?

5个回答

1
这解决了我的问题:
'columnDefs': [

 'targets': 0,      
 'render': function(data, type, row, meta){                                                     
  return type === "sort" ? data.toLowerCase() : data;

}]

0

这应该会对你有所帮助

var names = [
    {"FirstName":"A", "LastName":"Xb"},
    {"FirstName":"B", "LastName":"xa"},
    {"FirstName":"C", "LastName":"yc"}
];

names.sort(function(a, b) {
    return a.LastName.toLowerCase().localeCompare(
        b.LastName.toLowerCase()
    );
});

console.log(names);

在 jsFiddle 上查看它的运行情况


0
你可以尝试这样做:
jQuery.fn.dataTableExt.oSort['string-case-asc']  = function(x,y) {
return ((x < y) ? -1 : ((x > y) ?  1 : 0));
};

jQuery.fn.dataTableExt.oSort['string-case-desc'] = function(x,y) {
return ((x < y) ?  1 : ((x > y) ? -1 : 0));
};

通过在进行排序之前准备要排序的数据,改进了排序性能。例如,在同一个字符串上多次执行 .toLowerCase() 是没有意义的 - 它总是会产生相同的结果。因此,排序函数现在可能有一个 {type}-pre 方法,以及 {type}-desc 和 {type}-asc 方法来准备数据。所有内部排序方法现在都使用这种方法。

来自 source


X和Y值是什么?它们代表什么值? - Raje
这些是我使用的变量。您可以根据您的要求进行更改! - Rahul Tripathi

0

datatables插件的默认排序类型是不区分大小写的。但是,如果您正在使用带有SQL的服务器端处理,则大小写敏感性来自数据库而不是jquery.dataTables.js。要解决此问题,请找到您的SQL查询排序子句并将其更改为lower()。

如果您正在使用此处提供的示例:http://www.datatables.net/development/server-side/php_mysql 然后,将第81和82行替换为下面的代码即可完成。

$sOrder .= 'upper('.$aColumns[ intval( $_GET['iSortCol_'.$i] ) ].")
".mysql_real_escape_string( $_GET['sSortDir_'.$i] ) .", ";

希望这有所帮助。

0

我猜当你说jQuery DataTable时,你指的是Datatables.net上的datatable插件。如果是这样,从1.9版本开始,大小写敏感排序就可用了:

bCaseInsensitive


我正在使用 jQuery 1.4.4 版本。 - Raje

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接