2015-11-05 75 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

没问题,很乐意帮忙。 –

相关问题