我将以下代码作为表排序脚本的一部分。就像现在一样,它允许“最后一个”格式的名称通过“重新格式化”为“最后,第一”来按最后名称排序。
var FullName = fdTableSort.sortText;
function FullNamePrepareData(td, innerText) {
var a = td.getElementsByTagName('A')[0].innerHTML;
var s = innerText.split(' ');
var r = '';
for (var i = s.length; i > 0; i--) {
r += s[i - 1] + ', ';
}
return r;
}
目前似乎在最后一个空格之后对该名称进行排序(例如Jean-Claude Van Damme将对'D'进行排序)。
如何更改此脚本以在FIRST空间排序(因此Van Damme出现在V中)?
提前致谢!
答案 0 :(得分:2)
您可以使用array methods:
稍微缩短该功能function FullNamePrepareData(td, innerText) {
return innerText.split(' ').reverse().join(', ');
}
要仅将名字放在其他所有内容之后,您可以使用
function FullNamePrepareData(td, innerText) {
var names = innerText.split(' '),
first = names.shift();
return names.join(' ')+', '+first;
}
或使用Regexp replace:
function FullNamePrepareData(td, innerText) {
return innerText.replace(/^(\S+)\s+([\S\s]+)/, "$2, $1");
}
答案 1 :(得分:2)
而不是.split()
和循环,你可以做一个替换:
return innerText.replace(/^([^\s]+)\s(.+)$/,"$2, $1");
即,使用([^\s]+)
找到第一个空格的所有字符,并将其与第一个空格(.+)
后的字符交换,同时插入逗号。
答案 2 :(得分:0)
我不知道排序发生在哪里;听起来你只想改变重新排序的输出。
最简单的方法是使用正则表达式:
// a part without spaces, a space, and the rest
var regexp = /^([^ ]+) (.*)$/;
// swap and insert a comma
"Jean-Claude Van Damme".replace(regexp, "$2, $1"); // "Van Damme, Jean-Claude"
答案 3 :(得分:0)
我想你是在这之后:
var words = innerText.split(' '),
firstName = words.shift(),
lastName = words.join(' ');
return lastName + ', ' + firstName;
哪会给你“范达姆,让 - 克劳德”