0

我将以下代码作为表格排序脚本的一部分。就像现在一样,它允许“FIRST LAST”格式的名称通过“重新格式化”为“LAST,FIRST”来按 LAST 名称排序。

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 中)?

提前致谢!

4

4 回答 4

2

您可以通过使用数组方法来缩短该函数:

function FullNamePrepareData(td, innerText) {
    return innerText.split(' ').reverse().join(', ');
}

要仅将名字放在其他所有内容后面,您可以使用

function FullNamePrepareData(td, innerText) {
    var names = innerText.split(' '),
        first = names.shift();
    return names.join(' ')+', '+first;
}

或使用正则表达式替换

function FullNamePrepareData(td, innerText) {
    return innerText.replace(/^(\S+)\s+([\S\s]+)/, "$2, $1");
}
于 2012-08-20T21:32:27.183 回答
2

而不是.split()and 循环你可以做一个替换:

return innerText.replace(/^([^\s]+)\s(.+)$/,"$2, $1");

即找到第一个空格之前的所有字符,并与第一个空格([^\s]+)之后的字符交换(.+),同时插入逗号。

于 2012-08-20T21:34:32.363 回答
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"
于 2012-08-20T21:34:17.090 回答
0

我想你在这之后:

    var words = innerText.split(' '),
        firstName = words.shift(),
        lastName = words.join(' ');
    return lastName + ', ' + firstName;        

这会给你“范达姆,让-克劳德”

于 2012-08-20T21:38:00.407 回答