首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排序alphaNumeric HTML列表

排序alphaNumeric HTML列表
EN

Stack Overflow用户
提问于 2018-10-22 06:45:04
回答 1查看 222关注 0票数 2

我需要对alphaNumeric列表进行排序。我能够排序,但有些如何,因为它是alphaNumeric,我不能把abc1放在abc10之前。

我的HTML代码:

代码语言:javascript
复制
<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:

代码语言: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 10:你好
  • abc11 11:你好
  • abc1 1:你好
  • xyz24 24:你好
  • 氧2:你好

预期结果:

  • abc1 1:你好
  • abc10 10:你好
  • abc11 11:你好
  • 氧2:你好
  • xyz24 24:你好

我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-22 06:48:55

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

代码语言:javascript
复制
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));
代码语言:javascript
复制
<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上迭代

代码语言:javascript
复制
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));
});
代码语言:javascript
复制
<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>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52923644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档