我正在使用以下脚本来按字母顺序对HTML表格中的列进行排序。除了我没有完全控制非英文字符外,该剧本就像一个魅力。例如,如果我有一个以“Ü”开头的单词,则不会将其视为“U”(应该如此)。在执行排序之前有一种简单的音译字符方式(如ü-> u,ä-> a等)?请注意,我不想使用jQuery。
<script type="text/javascript">
var glossary, asc1 = 1,
asc2 = 1,
asc3 = 1;
window.onload = function () {
glossary = document.getElementById("glossary");
}
function sort_table(tbody, col, asc){
var rows = tbody.rows, rlen = rows.length, arr = new Array(), i, j, cells, clen;
// fill the array with values from the table
for(i = 0; i < rlen; i++){
cells = rows[i].cells;
clen = cells.length;
arr[i] = new Array();
for(j = 0; j < clen; j++){
arr[i][j] = cells[j].innerHTML;
}
}
// sort the array by the specified column number (col) and order (asc)
arr.sort(function(a, b){
return (a[col] == b[col]) ? 0 : ((a[col] > b[col]) ? asc : -1*asc);
});
for(i = 0; i < rlen; i++){
arr[i] = "<td>"+arr[i].join("</td><td>")+"</td>";
}
tbody.innerHTML = "<tr>"+arr.join("</tr><tr>")+"</tr>";
}
</script>
答案 0 :(得分:3)
您可以使用Intl.Collator
引入的ECMAScript Internationalization API:
arr.sort(Intl.Collator(lang).compare);
例如:
["Ü","U","V"].sort(); // ["U","V","Ü"]
["Ü","U","V"].sort(Intl.Collator('de').compare); // ["U","Ü","V"]
仅适用于最新的浏览器。
答案 1 :(得分:0)
刚开始提醒一下,这实际上是一种实现你想要做的事情的粗暴方式,但它只是javascript。如果你愿意的话,你可以让它变得更漂亮并做更多的事情。在这种情况下,你唯一能做的就是把它解释为unicode字符。
Unicode_Array=[... unicode for all characters you have problem with...]
// THIS ASSUMES YOUR UNICODE ARRAY HAS ALL THE CHARACTERS YOU NEEDED TO CHANGE
Real_English=[...every conversion for what you have in Unicode array...]
for (var i=0;i<Unicode_Array.length;i++){
converted_word=word_for_table.replace(Unicode_Array[i], Real_English[i]);
word_for_table=converted_word;
}