我正在使用以下腳本(jQuery 2.1.1)對包含文本和數值的串列進行排序。理論上,排序是有效的,因為在“iPhone 11”和“iPhone 6”之間,“iPhone 1”在“iPhone 6”之前,但在現實世界中這沒有意義,因為 6<11 和“iPhone 6”<“iPhone 11 ”。
$('ul').children("li").sort(function(a, b) {
var A = $(a).text().toUpperCase();
var B = $(b).text().toUpperCase();
return (A < B) ? -1 : (A > B) ? 1 : 0;
}).appendTo('ul');
應該如何排序:
iPhone 6
iPhone 8
iPhone 11
iPhone 12
samsung galaxy s8
samsung galaxy s10
samsung galaxy s20
什么排序回傳:
iPhone 11
iPhone 12
iPhone 6
iPhone 8
samsung galaxy s10
samsung galaxy s20
samsung galaxy s8
最好的方法是什么?我正在考慮剝離所有文本并根據剩下的整數進行排序,但如果我這樣做了,那么在當前串列中,會使“星系”模型出現在“iphone”模型之間(這也沒有意義),如下所示:
iPhone 6
iPhone 8
samsung galaxy s8
samsung galaxy s10
iPhone 11
iPhone 12
samsung galaxy s20
uj5u.com熱心網友回復:
由于您必須對包含數字的文本進行排序,因此請執行以下操作:
return A.localeCompare(B, false, {
numeric: true
})
您可以在此處找到有關 localCompare 和選項的更多資訊
所以你的代碼看起來像:
$('ul').children("li").sort(function(a, b) {
var A = $(a).text().toUpperCase();
var B = $(b).text().toUpperCase();
return A.localeCompare(B, false, {
numeric: true
})
}).appendTo('ul');
演示
顯示代碼片段
$('ul').children("li").sort(function(a, b) {
var A = $(a).text().toUpperCase();
var B = $(b).text().toUpperCase();
return A.localeCompare(B, false, {
numeric: true
})
}).appendTo('ul');
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li>iPhone 6</li>
<li>iPhone 8</li>
<li>samsung galaxy s8</li>
<li>samsung galaxy s10</li>
<li>iPhone 11</li>
<li>iPhone 12</li>
<li>samsung galaxy s20</li>
</ul>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/427538.html
標籤:javascript jQuery 排序
下一篇:根據列值百分位過濾資料框行
