首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用jQuery按字母顺序对列表进行排序?

如何用jQuery按字母顺序对列表进行排序?
EN

Stack Overflow用户
提问于 2021-06-17 23:19:14
回答 3查看 84关注 0票数 3

我有两个html文件index.htmllist.html。当我将list.html加载到index.html时,我希望它按照字母顺序自动排序。

index.html:

代码语言:javascript
复制
<button onclick="javascript:showlist()">Show</button>
<div id="content"></div>

list.html:

代码语言:javascript
复制
<ul id="myUL">
<li>SUPERMAN</li>
<li>BATMAN</li>
<li>FLASH</li>
<li>ANARKY</li>
</ul>

js:

代码语言:javascript
复制
function showlist(){
  $("#content").load("list.html");
  sortList();
}

function sortList() {
  var list, i, switching, b, shouldSwitch;
  list = document.getElementById("myUL");
  switching = true;
  /* Make a loop that will continue until
  no switching has been done: */
  while (switching) {
    // start by saying: no switching is done:
    switching = false;
    b = list.getElementsByTagName("li");
    // Loop through all list-items:
    for (i = 0; i < (b.length - 1); i++) {
      // start by saying there should be no switching:
      shouldSwitch = false;
      /* check if the next item should
      switch place with the current item: */
      if (b[i].innerHTML.toLowerCase() > b[i + 1].innerHTML.toLowerCase()) {
        /* if next item is alphabetically
        lower than current item, mark as a switch
        and break the loop: */
        shouldSwitch = true;
        break;
      }
    }
    if (shouldSwitch) {
      /* If a switch has been marked, make the switch
      and mark the switch as done: */
      b[i].parentNode.insertBefore(b[i + 1], b[i]);
      switching = true;
    }
  }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-06-17 23:52:16

缺少的部分是满载处理程序。否则,您可能会在内容加载之前调用sortList()。否则,您的功能就能工作了。

代码语言:javascript
复制
$("#content").load("list.html", function() {
    console.log("Loaded");
    sortList();
})
票数 3
EN

Stack Overflow用户

发布于 2021-06-17 23:49:32

在加载列表之前,不能对其排序

您需要在div上使用事件加载。

将其编码如下:

代码语言:javascript
复制
function showlist() {
  $('#content').load('list.html');
}

const contentDiv = document.querySelector('#content')

contentDiv.onload =_=> 
  {
  const
    list  = contentDiv.querySelector(`ul`)
  , arrLI = [...list.querySelectorAll('li')]
      .map(li=>({key:li.textContent.toLowerCase(),li}))
      .sort((a,b)=>a.key.localeCompare(b.key))

  arrLI.forEach(el=>list.appendChild(el.li) ) 
  }

下面是演示排序工作方式的代码:

代码语言:javascript
复制
sortList('#content')

function sortList( parentDiv )
  {
  const
    list  = document.querySelector(`${parentDiv} > ul`)
  , arrLI = [...list.querySelectorAll('li')]
      .map(li=>({key:li.textContent.toLowerCase(),li}))
      .sort((a,b)=>a.key.localeCompare(b.key))

  arrLI.forEach(el=>list.appendChild(el.li) ) 
  }
代码语言:javascript
复制
<div id="content">
  <ul>
    <li>SUPERMAN</li>
    <li>BATMAN</li>
    <li>FLASH</li>
    <li>ANARKY</li>
  </ul>
</div>

票数 2
EN

Stack Overflow用户

发布于 2021-06-19 15:48:40

正如公认的答案所提到的,您必须在.load()回调中运行排序代码。不过,我还是要再回答一次,因为这是你有的一些分类码。您可以使用.append().detach().sort()进行更简洁的代码。

代码语言:javascript
复制
$('#content').load('list.html', function() {
  $('ul').append($('li').detach().sort((a, b) => a.textContent > b.textContent));
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68027564

复制
相关文章

相似问题

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