JS进阶之以题悟道(一)列表内容排序再渲染

news2024/9/23 19:19:16

注释很详细,直接上代码

涉及知识点:

  1. 正则表达式
  2. outerHTML
  3. join
  4. map

题干:

在这里插入图片描述

我的答案

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
  </head>

  <body>
    <ul id="myList">
      <li id="item1">项目 1</li>
      <li id="item3">项目 3</li>
      <li id="item2">项目 2</li>
      <li id="item4">项目 4</li>
    </ul>

    <script>
      /**
       * 首先谈谈我们为什么这样做
       * JS更多的是面向应用的,对于这题我们不能停留在过测例,思路打开学得更多
       * 我们想要对id进行排序,id是字符串,所以需要提取id中的数字,然后进行比较
       * 这里很多小友会直接比较,因为当其他字符相同,数字在十以内的字符串确实是可以直接比较但固然不符合逻辑,eg."10"<"2"
       * 提取数字的方法怎么选择呢,如果使用substring可以吗,对这题肯定是可以了,但倘若不是item呢,这里我们又能用到正则表达式提取数字的方法,
       * 使用正则表达式`从后往前`匹配数字,提取到id中的数字字符串,然后转为数字进行比较
       */
      function sortAndReturnTextContent() {
        let items = document.getElementById("myList").children;
        // 在此补全代码
        const newArrSortByItems = Array.from(items).sort((idFront, idBack) => {
          const regex = /\d+$/; // 正则表达式: 从后往前匹配数字
          let numFromIdFront = Number(idFront.id.match(regex)[0]); // 提取id中的数字(字符串)并转为数字
          let numFromIdBack = Number(idBack.id.match(regex)[0]);
          return numFromIdFront < numFromIdBack ? -1 : 1; // 数字比较:返回值为负数表示idFront排在idBack前面,反之则后面
        });

        /**
         *将排序后的数组的outerHTML转换为HTML字符串并重新赋值给myList的innerHTML
         *这里注意区分 innerHTML 和 outerHTML
         *outerHTML: 即该元素及其内部的字符串
         *innerHTML: 即该元素内部的字符串
         *为什么需要用join("")
         *因为map返回的是字符串数组,需要用join("")转换为字符串
         *join("")里面的字符串是分割符,但这里用空字符串即可
         */
        document.getElementById("myList").innerHTML = newArrSortByItems
          .map((item) => item.outerHTML)
          .join("");
      }
      sortAndReturnTextContent();
    </script>
  </body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1944426.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

py3.7.4离线安装openpyxl等错误,无法安装openpyxl...

&#x1f3c6;本文收录于《CSDN问答解答》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

网络安全等级保护:什么是网络安全等级保护?(非常详细)零基础入门到精通,收藏这一篇就够了

关键词&#xff1a; 网络安全等级保护 等级保护 网络 信息系统 旧话重提&#xff0c;一直以来&#xff0c;我们不断强调“等级保护”制度是我国的网络安全领域的基本制度、基本策略和基本方法&#xff0c;是促进信息化健康发展&#xff0c;维护国家安全、社会秩序和公共利益的…

【计算机毕业设计】基于微信小程序的传染病防控宣传系统【源码+lw+部署文档】

包含论文源码的压缩包较大&#xff0c;请私信或者加我的绿色小软件获取 免责声明&#xff1a;资料部分来源于合法的互联网渠道收集和整理&#xff0c;部分自己学习积累成果&#xff0c;供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…

通过kali进行主机发现扫描

在虚拟机环境下配置4个虚拟系统“WinXP1” 、“WinXP2” 、“Kali Linux”和“Metasploitable2”&#xff0c;使得4个系统之间能够相互通信。其中&#xff0c;Windows xp1关闭防火墙状态&#xff0c;Windows xp2为开启防火墙状态。 1&#xff0e;在Kali的终端中分别输入命令“…

腾讯云k8s相关

1.某个服务腾讯云内网地址&#xff1f; 比如&#xff1a;spiderflow-web正式环境&#xff1a;http://spiderflow-web.sd-backend:30001 试一试&#xff1a;

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑静暂态电压稳定性的双极直流不平衡配电系统DG规划方法》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Pycharm2024最新版community社区版下载安装配置,快速上手

第一步&#xff1a;下载 方法1&#xff1a;官网链接 https://www.jetbrains.com/pycharm/download/?sectionwindows .方法2&#xff1a;百度网盘 链接&#xff1a;https://pan.baidu.com/s/1ic2N5hUQ2m1Kmyr5nK9Jxw?pwd76dt 提取码&#xff1a;76dt --来自百度网盘超级…

力扣3226 使两个整数相等的位更改次数

写的代码&#xff1a; class Solution { public:string cc(int num){string res"";while(num>0){int rnum % 2;resstatic_cast<char>(48r)res;num/2;}return res;}int minChanges(int n, int k) {int res0;string n2cc(n);string k2cc(k);int n_sizen2.siz…

samba安装和dns服务

samba [rootlocalhost ~]# vim /etc/selinux/config [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160 [rootlocalhost ~]# systemctl restart network 修改uuid的目的是为了保证网络服务的唯一性 1.创建…

GD 32 流水灯

前言&#xff1a; 通过后面的学习掌握了一些逻辑架构的知识&#xff0c;通过复习的方式将学到的裸机任务架构的知识运用起来&#xff0c;同时巩固前面学到的知识&#xff0c;GPIO的配置等。 开发板上LED引脚使用示意图 注&#xff1a;此次LED灯的点亮凡是是高电平点亮&#xff…

Java 集合中的 Vector 类和 Stack 类

一.介绍 Java 集合框架提供了一组强大的类和接口来处理和操作对象集合。其中&#xff0c;Vector 和 Stack 类提供了以顺序方式存储和管理元素的基本功能。这两个类都是传统集合的一部分&#xff0c;但由于它们的同步性质和特定用例&#xff0c;它们仍然具有相关性。Vector 类实…

【HarmonyOS】关于鸿蒙消息推送的心得体会(二)

【HarmonyOS】关于鸿蒙消息推送的心得体会&#xff08;二&#xff09; 前言 推送功能的开发与传统功能开发还是有很大区别。首先最大的区别点就在于需要多部门之间的协同&#xff0c;作为鸿蒙客户端开发&#xff0c;你需要和产品&#xff0c;运营&#xff0c;以及后台开发一起…

linux 部署flask项目

linux python环境安装: https://blog.csdn.net/weixin_41934979/article/details/140528410 1.创建虚拟环境 python3.12 -m venv .venv 2.激活环境 . .venv/bin/activate 3.安装依赖包(pip3.12 install -r requirements.txt) pip3.12 install -r requirements.txt 4.测试启…

Windows安装Visual Studio2022 + QT5.15开发环境

最近&#xff0c;把系统换成了Windows11&#xff0c;想重新安装QT5.12&#xff0c;结果发现下载不了离线安装包。 最后索性安装QT5.15了&#xff0c;特此记录下。 预祝大家&#xff1a;不论是何时安装&#xff0c;都可以安装到指定版本的QT。 一、VS2022安装 VS2022官网下…

推荐一款基于 SpringBoot2 的后台管理系统脚手架,非常轻量简单(附源码)

前言 在现代软件开发中&#xff0c;后台管理系统是企业数字化转型的关键组成部分。然而&#xff0c;现有软件常常存在一些痛点&#xff0c;如复杂的权限管理、缺乏灵活的工作流配置、监控和日志功能不完善等。此外&#xff0c;许多系统study 成本高&#xff0c;依赖关系复杂&a…

Pycharm软件Win 64位安装包+详细安装步骤 百度云

如大家所掌握的&#xff0c;Pycharm是一款集成开发环境&#xff08;IDE&#xff09;&#xff0c;专门用于python语言开发的工具。作为一款功能强大的IDE&#xff0c;Pycharm提供了丰富的功能和工具&#xff0c;使得python开发变得更加高效和便捷。 Pycharm常用场景如下&#x…

Unity发布XR中用于worldbuilding的全新电子书

通过身临其境的虚拟领域开始旅程&#xff0c;在维度之间传送&#xff0c;或将数字奇迹与现实世界融合——虚拟现实(VR)和混合现实(MR)的千万种可能性将邀请创作者把他们的想象力带入生活。 Unity发布的最新版综合指南将帮助有抱负的创作者和经验丰富的开发者深入研究和理解构建…

LLM模型与实践之基于 MindSpore 实现 BERT 对话情绪识别

安装环境 # 该案例在 mindnlp 0.3.1 版本完成适配&#xff0c;如果发现案例跑不通&#xff0c;可以指定mindnlp版本&#xff0c;执行!pip install mindnlp0.3.1 !pip install mindnlp 模型简介 BERT是一种由Google于2018年发布的新型语言模型&#xff0c;它是基于Transforme…

云计算核心算法(二)

目录 二、DHT算法&#xff08;一&#xff09;DHT原理介绍&#xff08;二&#xff09;Chord中DHT的具体实现&#xff08;三&#xff09;Pastry中DHT的具体实现&#xff08;四&#xff09;CAN中DHT的具体实现&#xff08;五&#xff09;Tapestry中DHT的具体实现 三、Gossip协议&a…

数据结构之栈详解

1. 栈的概念以及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈…