2015-11-05 64 views
3

我已經使用jquery在用戶更改頁面的語言代碼(通過語言選擇列表)後對國家/地區列表進行排序。這是一個相關的postjquery - 翻譯國家名稱並對它們進行排序

國名翻譯看起來運行正常,但翻譯的國名的排序(A-Z)並不起作用。

我注意到,當一個國家名稱對國名的第一個字母具有diaeresis/diacratic標記時,所述國家名稱被降級到列表的底部。

當英文國名被翻譯成德文時。最後出現帶有diaeresis/diacratic標記的國名。例如,國名Österreich(奧地利 - 英文)應該按字母O開頭的國家名稱排序。

是否有一定的竅門可以排序,包括帶有分音/ diacratic標記的字母?

這裏是我的兩難困境的直觀例子:

enter image description here

這裏是我的jQuery代碼:

function sortAddressTypes() { 
    // sort the address country style types list (country name) in alphabetical order after language code has changed. 
    var selected = $("#id_address_country_style_type").val(); // preserve the users selected value. 
    var options = $('#id_address_country_style_type option'); 
    var arr = options.map(function(_, o) { 
     return {t: $(o).text(), v: o.value}; 
    }).get(); 

    arr.sort(function(o1, o2) { 
     return o1.t.toLowerCase() > o2.t.toLowerCase() ? 1 : o1.t.toLowerCase() < o2.t.toLowerCase() ? -1 : 0; 
    }); 

    options.each(function(i, o) { 
     console.log(i); 
     o.value = arr[i].v; 
     $(o).text(arr[i].t); 
    }); 

    $("#id_address_country_style_type").val(selected); // assign the preserved users selected value. 
} 

回答

2

您可以使用localeCompare()sort()實現中比較含有變音符號的字符串:

arr.sort(function(o1, o2) { 
    return o1.t.toLowerCase().localeCompare(o2.t.toLowerCase()); 
}); 

localCompare() reference

+0

Rory McCrossan,感謝代碼和localCompare()引用。它像一個魅力。 – user1261774

+0

沒問題,很樂意幫忙。 –

相關問題