1

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>
4

2 に答える 2

4

ECMAScript Internationalization APIIntl.Collatorによって導入されたを使用できます。

arr.sort(Intl.Collator(lang).compare);

例えば:

["Ü","U","V"].sort();                            // ["U","V","Ü"]
["Ü","U","V"].sort(Intl.Collator('de').compare); // ["U","Ü","V"]

ただし、最新のブラウザでのみ動作します。

于 2014-05-12T18:32:32.410 に答える
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;
}
于 2014-05-12T18:52:37.200 に答える