0

0

使用jQuery实现DOM元素字母排序的教程

碧海醫心

碧海醫心

发布时间:2025-09-25 11:15:13

|

500人浏览过

|

来源于php中文网

原创

使用jquery实现dom元素字母排序的教程

本教程详细介绍了如何使用jQuery和原生JavaScript实现对DOM元素(如列表项)的字母顺序排序。文章将通过“提取-排序-重排”的核心策略,指导读者将DOM元素映射为JavaScript数组,利用Array.prototype.sort()和String.prototype.localeCompare()进行高效排序,并优化DOM操作。此外,教程还提供了将排序逻辑封装为jQuery插件的示例,并探讨了性能、事件处理和国际化等最佳实践。

动态列表排序的需求与挑战

在现代Web应用中,经常需要对页面上显示的列表或网格中的元素进行动态排序,例如按名称字母顺序、按日期或按数值大小。直接操作DOM元素进行排序可能会导致性能问题,尤其是在列表项数量较多时,频繁的DOM插入、移除和重绘操作会消耗大量资源。因此,采用一种高效且结构化的方法来处理DOM元素的排序至关重要。

核心策略:数据映射与数组排序

解决DOM元素排序问题的最佳实践是采用“提取-排序-重排”的策略。具体步骤如下:

  1. 提取(Extract):将DOM元素及其用于排序的关键数据(如文本内容或数据属性)提取到一个普通的JavaScript数组中。
  2. 排序(Sort):对这个JavaScript数组进行排序。JavaScript数组的排序效率远高于直接操作DOM。
  3. 重排(Re-append):根据排序后的数组顺序,将DOM元素重新插入到其父容器中。

这种方法将复杂的DOM操作最小化,集中在数据处理上,从而显著提高性能和代码可维护性。

实现步骤详解

我们将以一个典型的列表排序场景为例,演示如何对

元素进行字母排序。

步骤一:获取目标元素集合

首先,使用jQuery选择器选中所有需要排序的DOM元素。

const $container = $("#assignedMemberList"); // 获取列表的父容器
const $items = $container.children('.list-group-item'); // 获取所有待排序的子元素

步骤二:创建映射数组

接下来,将jQuery集合转换为一个普通的JavaScript数组,其中每个元素都是一个对象,包含原始DOM元素和用于排序的值。排序值可以是元素的文本内容,也可以是其数据属性。

按文本内容排序:

const mappedItems = Array.from($items).map(item => ({
  elem: item,
  sortValue: $(item).text().toLowerCase() // 提取文本内容并转为小写进行比较
}));

按数据属性排序(如data-sortlist):

如果你的列表项有特定的数据属性用于排序,例如data-sortlist,你可以这样提取:

Draft&Goal-Detector
Draft&Goal-Detector

检测文本是由 AI 还是人类编写的

下载
Water
Lime
const mappedItems = Array.from($items).map(item => ({
  elem: item,
  sortValue: $(item).data('sortlist').toLowerCase() // 提取data-sortlist属性值并转为小写
}));

注意: 将字符串转换为小写进行比较,可以实现不区分大小写的字母排序。

步骤三:执行数组排序

使用Array.prototype.sort()方法对映射数组进行排序。比较函数应使用String.prototype.localeCompare(),它能提供正确的字母顺序排序,并支持国际化字符。

mappedItems.sort((a, b) => a.sortValue.localeCompare(b.sortValue));

步骤四:重排DOM元素

排序完成后,将排序后的DOM元素重新插入到其父容器中。为了优化DOM操作,建议先清空父容器,然后一次性添加所有排序后的元素。

const sortedElements = mappedItems.map(item => item.elem); // 提取排序后的DOM元素
$container.empty().append(sortedElements); // 清空容器并添加排序后的元素

如果父容器本身是动态的,或者需要确保其在DOM中的位置不变,可以考虑先将其detach(),操作完成后再append()回其原始位置。

// 假设 $container 是要排序的父容器
const $originalParent = $container.parent(); // 记录父容器的父元素
const $detachedContainer = $container.detach(); // 从DOM中移除容器

// 执行上述映射和排序逻辑...
// ...
const sortedElements = mappedItems.map(item => item.elem);

$detachedContainer.empty().append(sortedElements); // 清空并添加排序后的子元素

$originalParent.append($detachedContainer); // 将容器重新插入到原始位置

然而,对于大多数简单的列表排序场景,直接empty().append()到已存在的父容器中即可。

完整示例代码

以下是一个完整的HTML和JavaScript示例,演示如何对一个包含list-group-item的列表进行字母排序:




    
    
    jQuery DOM 元素字母排序教程
    
    


    

DOM 列表字母排序

ASSIGNED MEMBERS
Water
Lime
Banana
Melon
Apple
Orange
Grape
Kiwi
Pineapple
Strawberry

jQuery插件化封装(可选但推荐)

为了提高代码的复用性和可维护性,可以将排序逻辑封装成一个jQuery插件。这样,你可以在任何需要排序的父容器上直接调用这个方法。

(function($) {
    /**
     * 对指定jQuery对象(作为容器)的子元素进行排序。
     *
     * @param {Function} getSortValue 可选。一个函数,接收一个DOM元素,返回用于排序的值。
     *                                 默认为元素的文本内容。
     * @param {Function} comparator 可选。一个比较函数,接收两个包含`elem`和`sortValue`的对象,
     *                                 返回一个数字表示它们的相对顺序。
     *                                 默认为使用`localeCompare`进行不区分大小写的字符串比较。
     * @returns {jQuery} 返回原始jQuery对象,支持链式调用。
     */
    $.fn.sortChildren = function(getSortValue, comparator) {
        if (this.length === 0) {
            return this; // 如果没有元素,则直接返回
        }

        const $container = this.first(); // 操作第一个匹配的容器元素
        const $children = $container.children(); // 获取容器的所有子元素

        if ($children.length === 0) {
            return this; // 如果没有子元素,则直接返回
        }

        // 默认获取排序值函数:获取元素的文本内容
        getSortValue = getSortValue || function(elem) {
            return $(elem).text();
        };

        // 默认比较函数:使用localeCompare进行不区分大小写的字符串比较
        comparator = comparator || function(a, b) {
            return a.sortValue.toLowerCase().locale

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

150

2023.09.12

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

311

2023.10.13

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

395

2023.11.10

jQuery hover()方法的使用
jQuery hover()方法的使用

hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

504

2023.12.04

jquery实现分页方法
jquery实现分页方法

在jQuery中实现分页可以使用插件或者自定义实现。想了解更多jquery分页的相关内容,可以阅读本专题下面的文章。

182

2023.12.06

jquery中隐藏元素是什么
jquery中隐藏元素是什么

jquery中隐藏元素是非常重要的一个概念,在使用jquery隐藏元素之前,需要先了解css样式中关于元素隐藏的属性,比如display、visibility、opacity等属性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

120

2024.02.23

jquery中什么是高亮显示
jquery中什么是高亮显示

jquery中高亮显示是指对页面搜索关键词时进行高亮显示,其实现办法:1、先获取要高亮显示的行,获取搜索的内容,再遍历整行内容,最后添加高亮颜色;2、使用“jquery highlight”高亮插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

176

2024.02.23

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

38

2026.01.13

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

1

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.1万人学习

CSS教程
CSS教程

共754课时 | 24.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号