You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用jQuery按姓氏(.lname)对UI卡片进行字母顺序排序

使用jQuery按姓氏对UI卡片进行字母排序的解决方案

嘿,你想按卡片里的姓氏(.lname)给这些UI卡片做字母排序对吧?我帮你整理了完整的可实现方案,包括补全的HTML示例和对应的jQuery代码,一步步来:

完整的HTML示例结构

先给你补全带有不同姓氏的测试卡片,方便你直接测试效果:

<div class="main">
  <div class="card">
    <img src="https://www.w3schools.com/howto/img_avatar.png" alt="Avatar" style="width:100%">
    <div class="container">
      <h4><span class="lname">Smith</span> <span class="fname">John</span></h4>
      <p>Architect & Engineer</p>
    </div>
  </div>
  <div class="card">
    <img src="https://www.w3schools.com/howto/img_avatar2.png" alt="Avatar" style="width:100%">
    <div class="container">
      <h4><span class="lname">Adams</span> <span class="fname">Jane</span></h4>
      <p>Designer</p>
    </div>
  </div>
  <div class="card">
    <img src="https://www.w3schools.com/howto/img_avatar.png" alt="Avatar" style="width:100%">
    <div class="container">
      <h4><span class="lname">Brown</span> <span class="fname">Mike</span></h4>
      <p>Developer</p>
    </div>
  </div>
</div>

jQuery排序实现代码

下面是核心的排序逻辑,页面加载完成后自动执行排序:

$(document).ready(function() {
  // 把jQuery卡片集合转成原生DOM数组,方便使用数组排序方法
  let cards = $('.main .card').get();
  
  // 对卡片数组按姓氏排序
  cards.sort(function(cardA, cardB) {
    // 提取两个卡片的姓氏文本,转成小写避免大小写干扰排序结果
    let lastNameA = $(cardA).find('.lname').text().toLowerCase();
    let lastNameB = $(cardB).find('.lname').text().toLowerCase();
    
    // 按字母顺序比较
    if (lastNameA < lastNameB) {
      return -1; // cardA排在cardB前面
    }
    if (lastNameA > lastNameB) {
      return 1; // cardB排在cardA前面
    }
    
    // 可选:如果姓氏相同,按名字继续排序
    let firstNameA = $(cardA).find('.fname').text().toLowerCase();
    let firstNameB = $(cardB).find('.fname').text().toLowerCase();
    return firstNameA.localeCompare(firstNameB);
  });
  
  // 把排序后的卡片重新追加到主容器,替换原有顺序
  $.each(cards, function(index, card) {
    $('.main').append(card);
  });
});

关键细节说明

  • 用$().get()把jQuery对象转为原生DOM数组,这样才能调用数组的sort()方法
  • 转小写是为了避免大小写差异导致排序错误(比如"smith"和"Smith"会被视为同一个姓氏)
  • 额外添加的“姓氏相同按名字排序”逻辑是可选的,不需要的话可以直接删掉这部分代码

可选:点击按钮触发排序

如果不想页面加载就排序,想通过按钮触发,可以把排序逻辑封装成函数:

function sortCardsByLastName() {
  let cards = $('.main .card').get();
  cards.sort(function(cardA, cardB) {
    let lastNameA = $(cardA).find('.lname').text().toLowerCase();
    let lastNameB = $(cardB).find('.lname').text().toLowerCase();
    return lastNameA.localeCompare(lastNameB);
  });
  $.each(cards, function(index, card) {
    $('.main').append(card);
  });
}

// 绑定按钮点击事件
$('#sort-btn').click(function() {
  sortCardsByLastName();
});

对应的HTML需要添加一个按钮:

<button id="sort-btn">按姓氏字母排序</button>

内容的提问来源于stack exchange,提问作者Ibo Chief

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:18:48