gpt4 book ai didi

javascript - 排序 alphaNumeric HTML 列表

转载 作者:行者123 更新时间:2023-11-28 00:42:00 25 4
gpt4 key购买 nike

我需要对字母数字列表进行排序。我可以排序,但有些排序方式,因为它是 alphaNumeric,所以我无法将 abc1 放在 abc10 之前。

我的 HTML 代码:

<ul class="theList">
<li><b>abc11:</b>Hello</li>
<li><b>abc10:</b>Hello</li>
<li><b>xyz24:</b>Hello</li>
<li><b>abc1:</b>Hello</li>
<li><b>xyz2:</b>Hello</li>
</ul>

我的 JavaScript:

  $(document).ready(function() {
var list, i, switching, b, shouldSwitch;
list = document.getElementsByClassName("theList");
for (var j = 0; j < list.length; j++) {
switching = true;
while (switching) {
switching = false;
b = list[j].getElementsByTagName("li");
for (i = 0; i < (b.length - 1); i++) {
shouldSwitch = false;
if (b[i].innerHTML.toLowerCase() > b[i + 1].innerHTML.toLowerCase()) {
shouldSwitch = true;
break;
}
}
if (shouldSwitch) {
b[i].parentNode.insertBefore(b[i + 1], b[i]);
switching = true;
}
}
}
});

我的结果:

  • abc10:你好
  • abc11:你好
  • abc1:你好
  • xyz24:你好
  • xyz2:你好

预期结果:

  • abc1:你好
  • abc10:你好
  • abc11:你好
  • xyz2:你好
  • xyz24:你好

我错过了什么?

最佳答案

在文档之外,将 li 在它们自己的数组中排序,然后将它们附加到 ul< 可能会容易得多 再次以正确的顺序。您可以使用 localeCompare 检查哪个字符串按字典顺序排在第一位,不需要 jQuery:

const theList = document.querySelector('.theList');
const lis = Array.from(theList.children);
const firstText = elm => elm.children[0].textContent;
lis.sort((a, b) => firstText(a).localeCompare(firstText(b)));
lis.forEach(li => theList.appendChild(li));
<ul class="theList">
<li><b>abc11:</b>Hello</li>
<li><b>abc10:</b>Hello</li>
<li><b>xyz24:</b>Hello</li>
<li><b>abc1:</b>Hello</li>
<li><b>xyz2:</b>Hello</li>
</ul>

要对多个此类列表进行排序,请迭代 querySelectorAll:

document.querySelectorAll('.theList').forEach((theList) => {
const lis = Array.from(theList.children);
const firstText = elm => elm.children[0].textContent;
lis.sort((a, b) => firstText(a).localeCompare(firstText(b)));
lis.forEach(li => theList.appendChild(li));
});
<ul class="theList">
<li><b>abc11:</b>Hello</li>
<li><b>abc10:</b>Hello</li>
<li><b>xyz24:</b>Hello</li>
<li><b>abc1:</b>Hello</li>
<li><b>xyz2:</b>Hello</li>
</ul>

<ul class="theList">
<li><b>abc11:</b>Hello</li>
<li><b>abc10:</b>Hello</li>
<li><b>xyz24:</b>Hello</li>
<li><b>abc1:</b>Hello</li>
<li><b>xyz2:</b>Hello</li>
</ul>

关于javascript - 排序 alphaNumeric HTML 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52923644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com