我目前正在使用Mottie的tablesorter版本来构建目录。我在同一个表格单元格中有一个名称字段(组合名字和姓氏)。大多数数据条目都很简单(Firstname LastName),我设置了代码,以便通过使用以下方式交换姓氏和名字进行排序:
textExtraction: {
0: function(node) {
// swap first and last name for sorting
return $.trim($(node).text() || '').replace(/(\w+)\s(\w+)/g,'$2 $1');
}
}
不幸的是,有一些人有一个首选的名字,会出现在表格中:
[FirstName(PreferredName)LastName]
排序最终只按名字排序。
例如它的排序如下:
亚历克斯亚当斯 罗伯特(鲍勃)罗孚 布鲁斯布莱克 凯特琳克鲁兹但我希望它只使用姓氏:
亚历克斯亚当斯 布鲁斯布莱克 凯特琳克鲁兹我真的没有完全掌握正则表达式,所以我不确定是否有一种简单的方法可以使它在Lastname上排序。
任何帮助(包括有关如何替换。(正则表达式)工作的一些解释,将不胜感激!
谢谢!
答案 0 :(得分:1)
您需要设置正则表达式以检测首选名称(如果存在)。使用?
量词。
/* other stuff before the replace function */.replace(/(\w+)\s((?:\(\w+\)\s)?\w+)/g, '$2 $1')
虽然,如果输出必须是空格分隔的(并且条目并不总是以空格分隔),则需要另一个replace
:
.replace(/\)\s/g, ') ')
答案 1 :(得分:1)
我不会使用textExtraction
方法,因为它适用于所有表格单元格。
相反,请尝试使用此解析器。它使用数组操作将姓氏移到前面(demo)
$(function() {
$.tablesorter.addParser({
id: 'last-name',
is: function() {
return false;
},
format: function(str) {
var parts = (str || '').split(/\s+/),
last = parts.pop();
parts.unshift(last);
return parts.join(' ');
},
// set type, either numeric or text
type: 'text'
});
$('table').tablesorter({
theme: 'blue'
});
});
不要忘记添加类名来设置解析器:
<th class="sorter-last-name">Name</th>