按数据属性对列表进行排序

2024-03-20

我有一个人员列表,其职称按名字排序,如下所示:

<ul>
  <li data-azsort="smithjohn">
    <a href="#">
      <span class="list-name">John Smith</span>
    </a>
    <span class="list-desc">Professor</span>
  </li>
  ..
  <li data-azsort="barnestom">
    <a href="#">
      <span class="list-name">Tom Barnes</span>
    </a>
    <span class="list-desc">Lecturer</span>
  </li>
</ul>

我已经添加了data-azsort归因于<li>元素,我想将这些列表元素弹出到一个数组中,并基于该元素进行排序data-*属性(使用纯 JavaScript)。

对列表进行排序的最佳方式是什么data-azsort(A-Z),返回相同的代码?仅 JavaScript,无 jQuery 等。


这适用于任意数量的列表:它基本上收集了所有lis in ul具有您的属性的 s,根据它们的属性对它们进行排序data-*属性值并将它们重新附加到其父级。

Array.from(document.querySelectorAll("ul > li[data-azsort]"))
  .sort(({dataset: {azsort: a}}, {dataset: {azsort: b}}) => a.localeCompare(b)) // To reverse it, use `b.localeCompare(a)`.
  .forEach((item) => item.parentNode.appendChild(item));
<ul>
  <li data-azsort="skeetjon">
    <a href="#"><span class="list-name">Jon Skeet</span></a>
    <span class="list-desc">Stack Overflow user</span>
  </li>
  <li data-azsort="smithjohn">
    <a href="#"><span class="list-name">John Smith</span></a>
    <span class="list-desc">Professor</span>
  </li>
  <li data-azsort="barnestom">
    <a href="#"><span class="list-name">Tom Barnes</span></a>
    <span class="list-desc">Lecturer</span>
  </li>
</ul>
<ul>
  <li data-azsort="smithjohn">
    <a href="#"><span class="list-name">John Smith</span></a>
    <span class="list-desc">Professor</span>
  </li>
  <li data-azsort="barnestom">
    <a href="#"><span class="list-name">Tom Barnes</span></a>
    <span class="list-desc">Lecturer</span>
  </li>
  <li data-azsort="skeetjon">
    <a href="#"><span class="list-name">Jon Skeet</span></a>
    <span class="list-desc">Stack Overflow user</span>
  </li>
</ul>

有趣的是,它得到了一切li是在same数组,对它们进行排序,但最后找出哪个列表li原本属于.这是一个非常简单直接的解决方案。

如果你想按a对元素进行排序numericdata 属性,然后使用此排序函数:

// Presumably, the data-* attribute won’t be called `azsort`. Let’s call it `numsort`.
({dataset: {numsort: a}}, {dataset: {numsort: b}}) => Number(a) - Number(b) // `Number(b) - Number(a)` to reverse the sort.

一个稍长的 ECMAScript 5.1 替代方案是:

Array.prototype.slice.call(document.querySelectorAll("ul > li[data-azsort]")).sort(function(a, b) {
  a = a.getAttribute("data-azsort");
  b = b.getAttribute("data-azsort");

  return a.localeCompare(b);
}).forEach(function(node) {
  node.parentNode.appendChild(node);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按数据属性对列表进行排序 的相关文章

随机推荐

  • 如何将人声转换为数字格式?

    我正在开展一个使用生物识别系统来保护系统的项目 我们计划使用人声来保护系统 想法是让人们说出一些单词或句子 系统将以数字格式存储该语音 下次人们想要进入系统时 他 她必须说出一些单词 这些单词可能与之前使用的单词不同 也可能没有不同 我们不
  • 属性模式的优点和缺点是什么?

    史蒂夫 叶格描述了属性模式 in a 博客文章 http steve yegge blogspot com 2008 10 universal design pattern html Property of his 对于使用 C 或 Jav
  • 如何监控 iOS 模拟器的网络调用

    我正在尝试像 Firebug 一样监视从应用程序到我的服务器的调用 我找不到在 iOS Simulator 或 xCode 中查看该内容的方法 有没有办法在不嗅探所有流量的情况下做到这一点 如果没有 您建议使用什么工具 就我个人而言 我使用
  • 射线交叉未击中目标

    我正在尝试选择一个 3d 点 我阅读了各种网站 但我的代码不起作用 鼠标右键单击 glGetFloatv GL MODELVIEW MATRIX mv mat glGetFloatv GL PROJECTION MATRIX p mat i
  • C# Assert.AreNotEqual 与 Equals

    在尝试向自己验证 C Equals for IEnumerables 是一个引用 equals 时 我发现了一些奇怪的东西 在 NUnit 中进行以下设置 var a IEnumerable
  • QNetworkAccessManager没有完成信号

    我想直接请求和响应而不是使用connect SLOT finished SLOT 您可以使用QEventLoop以便应用程序等待并可以同时处理其他事件 include
  • 在 Cocoa 中获得机器唤醒+用户登录通知的可靠方法?

    我尝试过注册NSWorkspaceDidWakeNotification with NSNotificationCenter defaultCenter 但当我的 MacBook Pro 从睡眠状态唤醒时 它永远不会触发 我注册了其他通知
  • Kotlin:如何绕过 CancellationException

    我正在将一些旧的 RxJava 代码移植到协程中 使用 RxJava 我可以在我的活动中执行此操作 someBgOperation as AutoDispose autoDisposable AndroidLifecycleScopePro
  • PHP – setcookie() 不起作用

    我有这个页面 它设置一个 cookie 并在您选中复选框时回显一个字符串 字符串打印正确 但 cookie 从未被设置 我不知道为什么
  • 如何启用Windows 10“容器”功能?

    使用最新的 Windows 10 Fast Ring build 14316 在 VMware 虚拟机内 我试图使桌面应用程序转换器 https msdn microsoft com windows uwp porting desktop
  • 编码/gob 和编码/json 之间的区别

    我正在用 Go 编写一个应用程序 它使用编码 gob 在节点之间通过 UDP 发送结构和切片 它工作正常 但我注意到encoding json也有类似的API 搜索了一下 发现了这个信息 https golang org pkg encod
  • 使用 Spring Security (Spring Boot 3.0.2) 时如何访问 H2 控制台?

    所以我正在尝试学习 Spring 因为今年晚些时候我的一个项目将需要它 项目使用 Spring Boot 3 0 2 和 Java 17 我还使用 Spring Security 依赖项 这意味着我需要在不使用令牌的情况下授权某些 URL
  • 使用 X509certificate2 进行 RSA 加密和解密

    所以 我接下来需要的是 创建用于开发的证书 为客户端获取一份证书 为服务器获取一份证书 通过API检索客户端编码的密码并在服务器上解码 现在 我成功创建了以下证书这个链接 https blog jayway com 2014 09 03 c
  • 禁用屏幕键盘

    我正在为嵌入式应用程序开发 Windows 应用商店应用程序 其中唯一的输入设备是小型触摸屏 因此 我正在开发自己的数字和文本输入控件 它们与应用程序的视觉外观相匹配 并且在小屏幕上工作得更好 当文本框获得焦点时 是否可以防止 Window
  • num2cell() 的 python/numpy 等价物是什么?

    我很不幸能够通过 numpy 数组将一些 MATLAB 代码转换为 Python 有没有共识num2cell 就我个人而言 我认为这违背了 Python numpy 语法 这个想法是这样的 Using num2cell 你最终会得到一个看起
  • Spring中指定默认属性值为NULL

    我想在 Spring XML 配置文件中定义默认属性值 我希望这个默认值是null 像这样的东西
  • ap 在 Haskell 中如何以及为何被定义为 liftM2 id

    在试图更好地理解 Applicative 的同时 我查看了 的定义 它往往被定义为 ap 而 ap 又被定义为 ap Monad m gt m a gt b gt m a gt m b ap liftM2 id 查看 liftM2 和 id
  • 如何在提交前更改隐藏输入字段的值

    我有一个 Feedburner 订阅表格 其中有两个按钮 一个用于每日新闻 一个用于每周新闻 问题是如何更改带有名称的隐藏输入字段的值 uri 提交之前 我的解决方案不起作用 这就是我尝试使用的
  • 如何在vi中从中间开始缩进多行?

    例如 要转换这个 example array First gt This Second gt is Third gt an Fourth gt example Fifth gt 进入这个 example array First gt Thi
  • 按数据属性对列表进行排序

    我有一个人员列表 其职称按名字排序 如下所示 ul li a href span class list name John Smith span a span class list desc Professor span li li a h