Javascript 如何使用jQuery Tablesorter插件解析复杂字符串?
我有一张这样的桌子,我想分类:Javascript 如何使用jQuery Tablesorter插件解析复杂字符串?,javascript,jquery,tablesorter,Javascript,Jquery,Tablesorter,我有一张这样的桌子,我想分类: |名称|大小写| |约翰| X-123/08 P | |鲍勃| X-123/09 | |迪伦| X-45/10| 我想按案例年份对案例列进行排序,然后根据案例编号对案例列进行排序,知道格式始终是“X-(案例编号为1到4位)/(案例年份为2位)(有时是一些文本)”。这是可能的,在一年的情况下,我有一些文字,但它应该被忽略排序 我正在使用TableSorterjQuery的插件,我正在努力为此添加一个自定义解析器 谢谢你的帮助 编辑:以下是我想做的: jQuery.t
|名称|大小写|
|约翰| X-123/08 P |
|鲍勃| X-123/09 |
|迪伦| X-45/10| 我想按案例年份对案例列进行排序,然后根据案例编号对案例列进行排序,知道格式始终是“X-(案例编号为1到4位)/(案例年份为2位)(有时是一些文本)”。这是可能的,在一年的情况下,我有一些文字,但它应该被忽略排序 我正在使用TableSorterjQuery的插件,我正在努力为此添加一个自定义解析器 谢谢你的帮助 编辑:以下是我想做的:
jQuery.tablesorter.addParser({
// set a unique id
id: 'case',
is: function(s) {
return false;
},
format: function(s) {
// format your data for normalization
return s.replace(/^X-\d{1,4}\/(\d{2}).*$/, '$1') + ('000' + s.replace(/^X-(\d{1,4})\/\d{2}.*$/, '$1')).substr(-4);
},
// set type, either numeric or text
type: 'text'
});
这是伟大的工作,直到我遇到一个案件,2位,然后排名大于3位,我不明白为什么。。。
“X-458/09 P”的排序小于“X-48/09”。我将尝试一些调试,看看到底发生了什么
编辑2:还尝试了第二个答案:
jQuery.tablesorter.addParser({
// set a unique id
id: 'case',
is: function(s) {
return false;
},
format: function(s) {
var m = s.match(/X\-(\d+)\/(\d{2}).*$/);
var affaire = m[1];
var year = m[2];
return year + '000' + affaire;
},
// set type, either numeric or text
type: 'text'
});
结果似乎和第一个一样。。。我真的不明白为什么这么糟糕。为什么tablesorter认为488000 10比49000 10小 我认为您可以使用:
$.tablesorter.addParser({
// set a unique id
id: 'case',
is: function(s) {
// return false so this parser is not auto detected
return false;
},
format: function(s) {
// format your data for normalization
return s.replace(/^X-\d{1,4}\/(\d{2}).*$/, '$1') + ('000' + s.replace(/^X-(\d{1,4})\/\d{2}.*$/, '$1')).slice(-4);
},
// set type, either numeric or text
type: 'text'
});
编辑:
也许您已经尝试过类似的类型:'numeric'
;我不确定,但这可能会失败,因为parseInt('09')==0
编辑2:
更改为按年份排序,然后按案例编号排序。您可以使用正则表达式获取所需的2个值,例如:
var columnVal = "X-123/08";
var m = columnVal.match(/X\-(\d+)\/(\d{2})$/);
var case = m[1];
var year = m[2];
在尝试了多种方法后,这一方法似乎效果很好:
jQuery.tablesorter.addParser({
// set a unique id
id: 'case',
is: function(s) {
return false;
},
format: function(s) {
var m = s.match(/X\-(\d+)\/(\d{2}).*$/);
var caseVar = '000' + m[1];
var size = caseVar.length;
caseVar= caseVar.substr(size-4, 4);
var year = m[2];
return jQuery.tablesorter.formatFloat(year + caseVar);
},
// set type, either numeric or text
type: 'numeric'
});
我做了一些研究,发现substr函数的负值并不能在所有浏览器上都起作用(我使用IE,因为我的应用程序必须符合IE)。我想这就是我以前遇到的问题的原因,也是Spiny的解决方案不适合我的原因
无论如何,谢谢你们所有人的宝贵帮助 我已经试过了,但似乎不起作用=(我试过数字和文本。我在问题的描述中添加了一些东西,也许这就是原因。.有时一些文本,嗯?:)试着在结尾的
$
之前添加*
?这行得通吗?是的,有些文字是这样写的:“X-123/07 PRU”或“X-54/11 P(C)”通常只是几个字母,不应该在排序过程中考虑它们。我尝试了.*,但仍然没有机会。好的,可以肯定的是:你确实添加了<代码> $(“表”)。tablesorter({标题:{ 1:{Salter:‘Case}}});<代码>或者什么的,对吗?因为“X-54/11 P(C)”.replace(/^X-\d{1,4}\/(\d{2})。*$/,“$1”)在我的控制台中返回“11”。。。是否确实调用了format函数?可能在那里添加一些调试代码,或者只是警报;警报(s.replace(/^X-\d{1,4}\/(\d{2})。*$/,“$1”)代码>?调用了解析器,我已经做了一些调试来检查它。当我尝试一个警报(…)时,年份确实返回得很好,但我想要的是按年份排序,然后按案例编号排序(一年内)=/