Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
使用JavaScript和jQuery按规则随机重排DOM元素_创想鸟

使用JavaScript和jQuery按规则随机重排DOM元素

使用JavaScript和jQuery按规则随机重排DOM元素

本教程详细介绍了如何利用JavaScript和jQuery,根据预设规则(如首个元素类型固定、不同类型元素交替出现)随机重排页面上的DIV元素。文章涵盖了元素分离、Fisher-Yates洗牌算法的应用,以及如何根据规则逐一将元素重新插入DOM,确保每次页面加载时呈现不同的布局,同时满足特定显示要求。

在网页开发中,有时我们需要动态调整页面元素的顺序,使其在每次加载时呈现不同的布局,同时又需要遵循特定的排列规则。本教程将详细讲解如何使用javascript和jquery来实现这一目标,特别是针对具有不同类型且需按特定模式交替排列的dom元素。

需求分析

假设我们有两类DIV元素:卡片(Card,共5个)和图片(Image,共4个)。我们需要实现以下重排规则:

第一个显示的DIV必须是卡片类型(C)。后续的DIV应在图片(I)和卡片(C)之间交替出现,形成类似 C, I, C, I, C, I, C, I, C 的序列。每种类型的DIV(卡片或图片)在各自的序列中应是随机选择的。

传统的数组洗牌算法(如Fisher-Yates)虽然能实现完全随机,但无法满足上述复杂的交替和首位规则。因此,我们需要一种更精细的控制策略。

核心策略

解决这类问题的核心策略可以分为以下几个步骤:

元素分离: 将不同类型的DOM元素从其父容器中移除,并分别存储到独立的数组中。独立洗牌: 对每种类型的元素数组进行独立的随机洗牌,确保每种类型内部的顺序是随机的。按规则重组: 遍历洗牌后的元素数组,根据预设的规则(如首位固定、交替插入)将元素逐一重新添加到DOM中。

实现步骤与代码示例

我们将使用jQuery来简化DOM操作,并实现Fisher-Yates洗牌算法。

立即学习“Java免费学习笔记(深入)”;

1. HTML结构准备

首先,确保你的HTML中包含需要重排的DIV元素,并为它们分配易于区分的ID或类名。例如,这里我们使用ID前缀来区分卡片和图片。

            按规则随机重排DOM元素                body {            font: medium monospace;        }        /* 示例样式,非核心功能 */        .col-sm-12 { border: 1px solid #ccc; padding: 10px; margin-bottom: 5px; }        
Card #1
Card #2
Card #3
Card #4
Card #5
Image #1
Image #2
Image #3
Image #4

2. Fisher-Yates 洗牌算法

Fisher-Yates 洗牌算法是一种高效且公平的洗牌算法,它通过从数组末尾开始,每次随机选择一个未处理的元素与当前元素交换位置,直到数组开头。

/** * Fisher-Yates 洗牌算法 * @param {Array} array - 需要洗牌的数组 */function shuffle(array) {  for (let i = array.length - 1; i > 0; i--) {    const j = Math.floor(Math.random() * (i + 1)); // 随机选择一个索引,范围从0到i    // 交换 array[i] 和 array[j]    const temp = array[i];    array[i] = array[j];    array[j] = temp;  }}

3. 元素提取、洗牌与重组

在DOM加载完成后,我们执行以下操作:

使用jQuery选择器 $(“#content > [id^=card]”) 和 $(“#content > [id^=image]”) 分别选中卡片和图片元素。remove() 方法将这些元素从DOM中移除,但它们仍然存在于jQuery对象中。get() 方法将jQuery对象转换为原生JavaScript数组,方便进行洗牌操作。对两个数组分别调用 shuffle() 函数进行洗牌。最后,根据规则循环将元素重新追加到父容器 #content 中。

$(function() { // 等待DOM加载完成  // 1. 提取并移除DOM中的元素,转换为原生数组  let cards = $("#content > [id^=card]").remove().get();  let images = $("#content > [id^=image]").remove().get();  // 2. 分别对卡片和图片数组进行洗牌  shuffle(cards);  shuffle(images);  // 3. 根据规则重新组合并追加到DOM  // 规则:第一个必须是C,然后C, I, C, I... 交替  for (let i = 0; i < cards.length; i++) {    // 首先添加一个卡片    $("#content").append(cards[i]);    // 如果还有图片,则添加一个图片,实现C-I交替    if (i < images.length) {      $("#content").append(images[i]);    }  }});

完整代码示例

将上述JavaScript代码放入 标签中,并确保在jQuery库加载之后执行。

            按规则随机重排DOM元素                    body {            font: medium monospace;        }        /* 示例样式,非核心功能 */        .col-sm-12 { border: 1px solid #ccc; padding: 10px; margin-bottom: 5px; }        
Card #1
Card #2
Card #3
Card #4
Card #5
Image #1
Image #2
Image #3
Image #4
/** * Fisher-Yates 洗牌算法 * @param {Array} array - 需要洗牌的数组 */ function shuffle(array) { for (let i = array.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); const temp = array[i]; array[i] = array[j]; array[j] = temp; } } $(function() { // 等待DOM加载完成 // 1. 提取并移除DOM中的元素,转换为原生数组 let cards = $("#content > [id^=card]").remove().get(); let images = $("#content > [id^=image]").remove().get(); // 2. 分别对卡片和图片数组进行洗牌 shuffle(cards); shuffle(images); // 3. 根据规则重新组合并追加到DOM // 规则:第一个必须是C,然后C, I, C, I... 交替 for (let i = 0; i < cards.length; i++) { // 首先添加一个卡片 $("#content").append(cards[i]); // 如果还有图片,则添加一个图片,实现C-I交替 if (i < images.length) { $("#content").append(images[i]); } } });

注意事项与总结

元素数量不匹配: 在本例中,卡片有5个,图片有4个。循环逻辑 for (let i = 0; i 性能考量: 对于少量元素,移除并重新添加DOM元素的操作性能影响不大。但如果需要处理成百上千个元素,频繁的DOM操作可能会导致性能问题。在这种情况下,可以考虑使用文档碎片(DocumentFragment)来批量操作DOM,或者更高级的虚拟DOM技术。可扩展性: 如果有更多类型的元素或更复杂的规则,可以扩展这种分离-洗牌-重组的模式。例如,可以创建一个配置对象来定义不同类型的元素和它们的排列优先级。无障碍性(Accessibility): 动态改变DOM顺序可能会影响屏幕阅读器等辅助技术的阅读顺序。确保你的动态布局不会对依赖顺序的用户造成困扰,必要时提供替代方案或使用ARIA属性进行辅助。

通过以上方法,我们成功地实现了在满足特定排列规则的同时,对DOM元素进行随机重排的功能,这在构建动态和个性化的网页布局时非常有用。

以上就是使用JavaScript和jQuery按规则随机重排DOM元素的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1514179.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
统一React Native StackScreen样式的最佳实践
上一篇 2025年12月20日 08:16:26
React Native Stack Navigator:统一设置屏幕样式
下一篇 2025年12月20日 08:16:33

相关推荐

  • 使用服务账户更新Google日历:解决403 Forbidden错误

    使用服务账户更新Google日历:解决403 Forbidden错误使用服务账户更新Google日历:解决403 Forbidden错误使用服务账户更新Google日历:解决403 Forbidden错误使用服务账户更新Google日历:解决403 Forbidden错误

    本文深入探讨了在使用Google服务账户更新用户日历时常见的403 Forbidden错误,并提供了详细的解决方案。核心内容包括理解服务账户与日历访问权限的关系、正确配置域范围授权(Domain-Wide Delegation, DWD),以及区分Google Workspace账户与标准Gmail…

    2026年10月1日 • 用户投稿
    000
  • Excel表格怎么制作一个漂亮的考勤表_Excel考勤表制作教程

    Excel表格怎么制作一个漂亮的考勤表_Excel考勤表制作教程Excel表格怎么制作一个漂亮的考勤表_Excel考勤表制作教程Excel表格怎么制作一个漂亮的考勤表_Excel考勤表制作教程Excel表格怎么制作一个漂亮的考勤表_Excel考勤表制作教程

    答案是制作Excel考勤表的关键在于结构清晰、格式美观和功能实用。首先设置表头标题居中加粗,A列列明姓名,B列可选部门或编号,C列起按日期排列,末列添加出勤、迟到、缺勤统计项;接着通过调整字体、背景色、边框及隔行变色提升视觉效果;然后用√、○、×、△标记出勤状态,并利用COUNTIF函数自动统计各项…

    2026年10月1日 • 用户投稿
    200
  • 主板供电相数是不是越多越好?如何判断?

    供电相数并非越多越好,需结合CPU需求、用料与散热设计综合判断。多相供电可提升稳定性与超频能力,但存在虚标现象,真实相数应以MOSFET数量、DrMOS用料、PWM控制器及散热为准,普通用户6相足够,高端平台建议10相以上真实供电。 主板供电相数并不是越多越好,而是要结合实际需求和整体设计来看。供电…

    2026年10月1日
    100
  • java如何用else扩展if的条件判断 java条件分支语句的简单用法

    java如何用else扩展if的条件判断 java条件分支语句的简单用法java如何用else扩展if的条件判断 java条件分支语句的简单用法java如何用else扩展if的条件判断 java条件分支语句的简单用法java如何用else扩展if的条件判断 java条件分支语句的简单用法

    else语句是if条件不成立时的备选执行路径,它确保在if或else if条件都不满足时执行默认代码块;1. else与if构成互斥逻辑,保证仅一个分支执行,而独立if语句可能触发多个条件;2. if-else if-else链用于处理多重互斥条件,需按从严格到宽松的顺序排列条件以避免逻辑错误;3.…

    2026年10月1日 • 用户投稿
    100
  • java使用教程怎样处理大数据量的集合操作 java使用教程的大数据处理指南​

    java使用教程怎样处理大数据量的集合操作 java使用教程的大数据处理指南​java使用教程怎样处理大数据量的集合操作 java使用教程的大数据处理指南​java使用教程怎样处理大数据量的集合操作 java使用教程的大数据处理指南​java使用教程怎样处理大数据量的集合操作 java使用教程的大数据处理指南​

    处理java中的大数据量集合操作,关键在于避免内存溢出并提升处理效率。1. 采用分批处理,通过分页或分块方式读取数据,如使用数据库的limit和offset每次处理固定大小的数据批次;2. 利用stream api进行流式处理,结合parallel()实现并行计算,同时通过filter、map等操作…

    2026年10月1日 • 用户投稿
    000
  • 炫书网最新小说免费阅_炫书网TXT完结下载站

    炫书网最新小说免费阅_炫书网TXT完结下载站炫书网最新小说免费阅_炫书网TXT完结下载站炫书网最新小说免费阅_炫书网TXT完结下载站炫书网最新小说免费阅_炫书网TXT完结下载站

    炫书网提供丰富小说资源,涵盖多种题材,支持TXT格式下载及在线阅读,界面简洁、操作便捷,并具备书架收藏、排行榜和评论互动等个性化服务,提升用户体验。 炫书网最新小说免费阅?这是不少读者都关注的,接下来由PHP小编为大家带来炫书网TXT完结下载站相关信息,喜欢阅读小说的朋友们一起随小编来瞧瞧吧! ht…

    2026年10月1日 • 用户投稿
    100
  • Excel表格怎么画组织结构图_Excel组织结构图制作方法

    Excel表格怎么画组织结构图_Excel组织结构图制作方法Excel表格怎么画组织结构图_Excel组织结构图制作方法Excel表格怎么画组织结构图_Excel组织结构图制作方法Excel表格怎么画组织结构图_Excel组织结构图制作方法

    使用SmartArt是Excel制作组织结构图的最快方法,插入后选择“层次结构”样式并输入信息,通过文本窗格或右键添加上下级;也可用形状工具手动绘制,插入矩形和线条并编辑文字,配合对齐、网格线与统一格式确保美观;完成后可复制为图片或导出至Word、PPT,适合日常办公需求。 在Excel中制作组织结…

    2026年10月1日 • 用户投稿
    700
  • java如何实现简单的GUI界面程序 java图形界面开发的实用教程

    java如何实现简单的GUI界面程序 java图形界面开发的实用教程java如何实现简单的GUI界面程序 java图形界面开发的实用教程java如何实现简单的GUI界面程序 java图形界面开发的实用教程java如何实现简单的GUI界面程序 java图形界面开发的实用教程

    使用swing是java实现gui最直接的方式,因其内置jdk、上手快、适合功能性界面开发,通过jframe、jpanel、jlabel、jbutton等组件可快速构建交互式窗口,结合布局管理器、事件监听和外观设置能提升界面专业性,而面对线程安全、复杂布局、性能优化等挑战时需采用swingutili…

    2026年10月1日 • 用户投稿
    900
  • 如何收集 Maven 项目中使用的第三方 JAR 包列表

    如何收集 Maven 项目中使用的第三方 JAR 包列表如何收集 Maven 项目中使用的第三方 JAR 包列表如何收集 Maven 项目中使用的第三方 JAR 包列表如何收集 Maven 项目中使用的第三方 JAR 包列表

    本文将指导你如何使用 Maven 命令来收集项目中所依赖的所有第三方 JAR 包的列表。了解项目依赖关系对于依赖管理、安全审查以及避免潜在的冲突至关重要。Maven 提供了便捷的命令来完成这项任务。 正如文章摘要所述,我们可以利用 Maven 的 dependency:build-classpath…

    2026年10月1日 • 用户投稿
    400
  • MySQL如何排序查询结果 多列排序与自定义排序规则

    MySQL如何排序查询结果 多列排序与自定义排序规则MySQL如何排序查询结果 多列排序与自定义排序规则MySQL如何排序查询结果 多列排序与自定义排序规则MySQL如何排序查询结果 多列排序与自定义排序规则

    mysql排序查询结果的核心是使用order by子句,它支持按一个或多个列进行升序(asc)或降序(desc)排序。1. 多列排序时,优先级从左到右依次递减,即先按第一个列排序,相同值时再按第二个列排序,依此类推;2. 自定义排序可通过field()函数或case语句实现,field()根据字段值…

    2026年10月1日 • 用户投稿
    400
  • java代码怎样实现类之间的继承关系 java代码继承特性的应用技巧​

    java代码怎样实现类之间的继承关系 java代码继承特性的应用技巧​java代码怎样实现类之间的继承关系 java代码继承特性的应用技巧​java代码怎样实现类之间的继承关系 java代码继承特性的应用技巧​java代码怎样实现类之间的继承关系 java代码继承特性的应用技巧​

    java继承的优势在于提升代码复用性、支持多态和构建清晰的类层次结构,陷阱则包括导致紧密耦合、脆弱基类问题及过度复杂的继承链;1. 继承通过extends实现,子类可复用父类非private成员;2. 构造器中必须先调用super()初始化父类;3. 方法重写需满足签名一致且访问修饰符不能更严格;4…

    2026年10月1日 • 用户投稿
    100
  • 天马发布高端OLED技术品牌,开启视觉体验新纪元

    天马发布高端OLED技术品牌,开启视觉体验新纪元天马发布高端OLED技术品牌,开启视觉体验新纪元天马发布高端OLED技术品牌,开启视觉体验新纪元天马发布高端OLED技术品牌,开启视觉体验新纪元

    9月19日,天马微电子于厦门隆重举办“天工屏 定乾坤”高端oled技术品牌发布会,正式推出全新高端oled技术品牌——天马“天工屏”。此次发布聚焦“超级护眼、极致通透、畅快高刷”三大核心技术突破,重新树立高端显示领域的行业标杆。发布会现场群贤毕至,中国科学院院士、理论物理研究所战略发展委员会主任欧阳…

    2026年10月1日 • 用户投稿
    100
  • windows安装.net framework 3.5失败怎么办_.NET Framework 3.5安装失败错误0x800f0954解决方法

    0x800f0954错误可通过离线安装、DISM命令、组策略调整或重置更新服务解决。首先使用Windows安装介质中的sxs文件夹通过“启用Windows功能”手动指定源路径;或在管理员命令提示符下运行DISM命令指定源路径安装;若因组策略限制,可修改“指定可选组件安装来源”策略禁用Windows …

    2026年10月1日
    100
  • ChatGPT能否设计用户问卷 ChatGPT调研工具自动生成方案

    ChatGPT能否设计用户问卷 ChatGPT调研工具自动生成方案ChatGPT能否设计用户问卷 ChatGPT调研工具自动生成方案ChatGPT能否设计用户问卷 ChatGPT调研工具自动生成方案ChatGPT能否设计用户问卷 ChatGPT调研工具自动生成方案

    ChatGPT完全具备辅助设计用户问卷的能力。通过向其提供清晰的指令,可以高效地生成结构合理、问题多样的调研问卷。本文将详细讲解如何利用ChatGPT来自动生成一份完整的用户问卷,从明确调研目的开始,到逐步迭代优化问题,最终形成可用的问卷方案,帮助您掌握具体的操作流程。 ☞☞☞AI 智能聊天, 问答…

    2026年9月30日 • 用户投稿
    100
  • 手机如何查看Mac地址(简单操作教你轻松获取设备Mac地址)

    手机如何查看Mac地址(简单操作教你轻松获取设备Mac地址)手机如何查看Mac地址(简单操作教你轻松获取设备Mac地址)手机如何查看Mac地址(简单操作教你轻松获取设备Mac地址)手机如何查看Mac地址(简单操作教你轻松获取设备Mac地址)

    在日常使用手机的过程中,我们常常需要查看手机的mac地址。mac地址是设备的唯一标识,通过获取mac地址可以进行网络识别和管理。本文将详细介绍如何使用手机来查看mac地址,帮助读者更好地了解自己的设备。 了解Mac地址的重要性 在当今无处不在的移动设备时代,了解手机的 Mac 地址对于保护个人信息和…

    2026年9月30日 • 用户投稿
    100
  • Apache 2.4环境中正确配置.phps文件源码访问权限

    本文旨在解决Apache 2.4服务器上访问.phps文件时遇到的403 Forbidden错误。核心解决方案在于,对于现代Apache版本,应使用Require all granted指令替换旧的Order Deny,Allow语法,以确保正确授权对PHP源代码文件的访问,并详细指导配置步骤,避免…

    2026年9月30日
    100
  • 123网盘如何快速搜索查找文件_123网盘文件快速搜索技巧

    123网盘如何快速搜索查找文件_123网盘文件快速搜索技巧123网盘如何快速搜索查找文件_123网盘文件快速搜索技巧123网盘如何快速搜索查找文件_123网盘文件快速搜索技巧123网盘如何快速搜索查找文件_123网盘文件快速搜索技巧

    123云盘高效搜索方法包括:使用关键词精准查找,按文件类型和时间筛选缩小范围,为高频文件添加标签以便快速定位,以及查看“最近使用”记录回溯近期文件。 在123网盘文件越来越多的情况下,掌握高效的搜索方法能省下大量翻找的时间。直接用好系统自带的功能,就能快速定位目标文件。 使用关键词精准搜索 打开12…

    2026年9月30日 • 用户投稿
    000
  • 在手机淘宝装修的时候千万不能做的禁忌你知道吗?

    在手机淘宝装修的时候千万不能做的禁忌你知道吗?在手机淘宝装修的时候千万不能做的禁忌你知道吗?在手机淘宝装修的时候千万不能做的禁忌你知道吗?在手机淘宝装修的时候千万不能做的禁忌你知道吗?

    避免图片动画过多、信息堆砌、布局错乱、滥用分享与音乐、使用无版权素材,确保手机淘宝店铺加载流畅、视觉清晰、操作便捷,提升用户体验与转化率。 如果您在手机淘宝上进行店铺装修,却发现页面加载缓慢或用户流失严重,很可能是触碰了某些常见的设计禁忌。这些问题会直接影响用户体验和店铺转化率。 本文运行环境:iP…

    2026年9月30日 • 用户投稿
    400
  • Android BLE AdvertisingSet 扫描响应数据发送指南

    Android BLE AdvertisingSet 扫描响应数据发送指南Android BLE AdvertisingSet 扫描响应数据发送指南Android BLE AdvertisingSet 扫描响应数据发送指南Android BLE AdvertisingSet 扫描响应数据发送指南

    本教程详细阐述了在 Android BLE AdvertisingSet 中正确配置和发送扫描响应(Scan Response)数据的方法。核心在于确保 AdvertisingSetParameters 中设置 setScannable(true),以允许设备响应扫描请求并发送包含额外信息的扫描响应…

    2026年9月30日 • 用户投稿
    000
  • Android BLE AdvertisingSet 广播扫描响应数据配置指南

    Android BLE AdvertisingSet 广播扫描响应数据配置指南Android BLE AdvertisingSet 广播扫描响应数据配置指南Android BLE AdvertisingSet 广播扫描响应数据配置指南Android BLE AdvertisingSet 广播扫描响应数据配置指南

    本文旨在解决Android BLE AdvertisingSet在广播时无法正确发送扫描响应数据的问题。核心在于配置AdvertisingSetParameters时,必须显式调用setScannable(true),以允许设备响应扫描请求并发送包含额外数据的扫描响应包。教程将详细阐述Adverti…

    2026年9月30日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信