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数组数据动态渲染为DOM中的列表元素_创想鸟

如何将JavaScript数组数据动态渲染为DOM中的列表元素

如何将JavaScript数组数据动态渲染为DOM中的列表元素

本教程详细讲解如何将javascript数组中的数据高效地渲染为dom中的无序列表(`

`)项。文章通过构建html字符串并利用`innerhtml`属性实现动态更新,同时强调了使用`innerhtml`时可能存在的跨站脚本(xss)风险,并提供了相应的安全防护建议,旨在帮助开发者安全且有效地在网页上展示动态数据。

动态渲染JavaScript数组为DOM列表元素

在Web开发中,经常需要将后端获取或用户输入的动态数据以列表形式展示在页面上。JavaScript数组是存储这类数据的常见结构,而将其内容渲染为HTML的无序列表(

)或有序列表()是基础且重要的技能。本节将详细介绍如何实现这一功能,并提供安全实践建议。

核心原理:构建HTML字符串并更新DOM

将JavaScript数组转换为DOM列表元素的核心思路是:遍历数组中的每个元素,为每个元素生成一个对应的列表项(

)的HTML字符串,然后将所有这些列表项拼接成一个完整的HTML字符串,最后将这个完整的HTML字符串赋值给目标或元素的innerHTML属性。

1. 构建列表项HTML字符串

首先,我们需要一个函数来接收一个JavaScript数组,并返回一个包含所有列表项的HTML字符串。

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

/** * 将JavaScript数组转换为包含
  • 元素的HTML字符串。 * @param {Array} arr - 包含要显示的数据的字符串数组。 * @returns {string} 包含所有
  • 元素的HTML字符串。 */function convertToListLi(arr) { let listItemsHtml = ""; // 初始化一个空字符串,用于累加所有
  • 元素 for (let i = 0; i < arr.length; i++) { // 拼接每个数组元素为一个
  • 标签 // 注意:此处未进行XSS过滤,生产环境应严格处理用户输入 listItemsHtml += `
  • ${arr[i]}
  • `; } return listItemsHtml; // 返回最终的HTML字符串}

    在上述代码中,我们声明了一个listItemsHtml变量来存储生成的HTML。在循环中,我们使用模板字符串(反引号 `)来方便地将数组元素arr[i]嵌入到

    标签中,并将其追加到listItemsHtml变量。

    2. 将HTML字符串渲染到DOM

    有了生成HTML字符串的函数后,下一步就是将其插入到DOM中。这通常在一个事件处理函数(例如点击按钮)中完成。

    let linksArray = []; // 存储链接数据的数组const inputEl = document.getElementById("input-el"); // 获取输入框元素const displayEl = document.getElementById("display_link-el"); // 获取目标
      元素/** * 保存用户输入并更新DOM列表。 */function save() { const inputValue = inputEl.value.trim(); // 获取输入值并去除首尾空格 if (inputValue) { // 确保输入不为空 linksArray.push(inputValue); // 将新输入添加到数组 inputEl.value = ""; // 清空输入框 // 将更新后的数组渲染到DOM displayEl.innerHTML = convertToListLi(linksArray); // 可选:将数据保存到localStorage,以便页面刷新后仍能保留 localStorage.setItem("mylinks", JSON.stringify(linksArray)); }}

    这里需要注意的是,我们使用displayEl.innerHTML = convertToListLi(linksArray);来更新DOM。innerHTML属性允许我们设置或获取元素的HTML内容。与textContent不同,innerHTML会解析并渲染HTML标签,使其成为实际的DOM元素。

    完整示例代码

    下面是一个包含HTML结构和JavaScript逻辑的完整示例,演示了如何通过用户输入动态地添加和显示列表项。

                动态渲染数组为DOM列表            body { font-family: Arial, sans-serif; margin: 20px; background-color: #f4f4f4; color: #333; }        h1, h2 { color: #0056b3; }        div { margin-bottom: 15px; }        input[type="text"] {            padding: 10px;            margin-right: 10px;            border: 1px solid #ccc;            border-radius: 4px;            width: 250px;            box-sizing: border-box;        }        button {            padding: 10px 20px;            background-color: #007bff;            color: white;            border: none;            border-radius: 4px;            cursor: pointer;            font-size: 16px;            transition: background-color 0.2s ease;        }        button:hover { background-color: #0056b3; }        button#del-btn { background-color: #dc3545; }        button#del-btn:hover { background-color: #c82333; }        ul {            list-style-type: decimal; /* 使用数字列表 */            padding-left: 25px;            margin-top: 15px;            background-color: #fff;            border: 1px solid #eee;            border-radius: 4px;            padding-top: 10px;            padding-bottom: 10px;        }        li {            margin-bottom: 8px;            line-height: 1.5;        }        

    动态列表渲染示例

    我的动态列表

    let linksArray = []; // 存储链接数据的数组 const inputEl = document.getElementById("input-el"); // 获取输入框元素 const displayEl = document.getElementById("display_link-el"); // 获取目标
      元素 // 页面加载时尝试从localStorage加载数据 const storedLinks = JSON.parse(localStorage.getItem("mylinks")); if (storedLinks) { linksArray = storedLinks; displayEl.innerHTML = convertToListLi(linksArray); // 初始渲染 } /** * 将JavaScript数组转换为包含
    • 元素的HTML字符串。 * @param {Array} arr - 包含要显示的数据的字符串数组。 * @returns {string} 包含所有
    • 元素的HTML字符串。 */ function convertToListLi(arr) { let listItemsHtml = ""; for (let i = 0; i < arr.length; i++) { // 注意:这里直接使用了数组元素,未进行XSS过滤。 // 生产环境中,对于用户输入的内容,必须先进行转义或净化。 listItemsHtml += `
    • ${arr[i]}
    • `; } return listItemsHtml; } /** * 保存用户输入并更新DOM列表。 */ function save() { const inputValue = inputEl.value.trim(); if (inputValue) { linksArray.push(inputValue); inputEl.value = ""; // 清空输入框 // 渲染更新后的数组到DOM displayEl.innerHTML = convertToListLi(linksArray); // 保存到localStorage localStorage.setItem("mylinks", JSON.stringify(linksArray)); } } /** * 删除所有链接的示例函数。 * 生产环境中应包含更详细的确认弹窗和数据清理

    以上就是如何将JavaScript数组数据动态渲染为DOM中的列表元素的详细内容,更多请关注创想鸟其它相关文章!

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

    赞 (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    jQuery与纯CSS实现多元素独立悬停提示效果教程
    上一篇 2025年12月23日 06:43:46
    html源码怎么保存为网页项目_html源码保存为网页项目的技巧
    下一篇 2025年12月23日 06:44:01

    相关推荐

    • 通过索引获取 LinkedHashMap 的值?解决方案与最佳实践

      通过索引获取 LinkedHashMap 的值?解决方案与最佳实践通过索引获取 LinkedHashMap 的值?解决方案与最佳实践通过索引获取 LinkedHashMap 的值?解决方案与最佳实践通过索引获取 LinkedHashMap 的值?解决方案与最佳实践

      本文旨在解决如何比较两个 LinkedHashMap 中具有相同键(chargeTypeName)的值的问题。由于 LinkedHashMap 本身不支持通过索引直接访问,文章将探讨如何利用流(Stream)和分组(Grouping)等技术,有效地找出两个 LinkedHashMap 中键相同的值对…

      2026年9月25日 • 用户投稿
      000
    • 联想携手人人租,以云锁服务方案打造设备租赁新范式

      联想携手人人租,以云锁服务方案打造设备租赁新范式联想携手人人租,以云锁服务方案打造设备租赁新范式联想携手人人租,以云锁服务方案打造设备租赁新范式联想携手人人租,以云锁服务方案打造设备租赁新范式

      就在不久前,联想与国内领先的设备租赁平台人人租正式宣布达成战略合作,双方将围绕智能设备租赁的全生命周期管理,在设备管控、技术服务、供应链协同等多个关键环节展开深度协作,共同打造覆盖“租前—租中—租后”的数字化租赁新模式。此次合作的重要技术支撑,是联想最新推出的“云锁服务方案”,该方案将全面赋能人人租…

      2026年9月25日 • 用户投稿
      000
    • laravel怎么清除应用的所有缓存_laravel应用缓存清理方法

      Laravel应用响应异常或配置未生效时,需清除缓存。依次执行php artisan route:clear、config:clear、view:clear和cache:clear命令,可分别清除路由、配置、视图及应用缓存,确保修改生效。 如果您发现 Laravel 应用响应异常或配置更改未生效,可…

      2026年9月25日
      100
    • 使用 Jackson 进行复杂类的自定义反序列化

      使用 Jackson 进行复杂类的自定义反序列化使用 Jackson 进行复杂类的自定义反序列化使用 Jackson 进行复杂类的自定义反序列化使用 Jackson 进行复杂类的自定义反序列化

      本文介绍了如何使用 Jackson 库对包含复杂嵌套类的 JSON 字符串进行自定义反序列化。通过 ObjectMapper 的 readValue 方法可以实现简单场景下的自动反序列化。针对需要定制化处理的场景,可以结合 ObjectMapper 和自定义反序列化器来实现更灵活的反序列化逻辑,并提…

      2026年9月25日 • 用户投稿
      900
    • 使用 JSON Schema 中的 oneOf 避免无效枚举值的错误提示

      使用 JSON Schema 中的 oneOf 避免无效枚举值的错误提示使用 JSON Schema 中的 oneOf 避免无效枚举值的错误提示使用 JSON Schema 中的 oneOf 避免无效枚举值的错误提示使用 JSON Schema 中的 oneOf 避免无效枚举值的错误提示

      本文旨在帮助开发者理解并解决在使用 JSON Schema 验证 JSON 数据时,由于 oneOf 约束可能导致的“无效枚举值”的错误提示问题。我们将通过示例代码,详细解释错误产生的原因,并提供相应的解决方案,以确保 JSON Schema 验证的准确性和可读性。 在使用 JSON Schema …

      2026年9月25日 • 用户投稿
      500
    • 动态缓存键配置:Spring Boot 缓存管理的灵活应用

      动态缓存键配置:Spring Boot 缓存管理的灵活应用动态缓存键配置:Spring Boot 缓存管理的灵活应用动态缓存键配置:Spring Boot 缓存管理的灵活应用动态缓存键配置:Spring Boot 缓存管理的灵活应用

      在 Spring Boot 应用中,使用 @Cacheable 注解可以方便地实现缓存功能。然而,在某些场景下,我们需要根据请求参数动态地生成缓存键,而不是简单地使用固定的键值。虽然 @Cacheable 注解允许通过 key 属性指定 SpEL 表达式来生成缓存键,但有时我们可能需要更灵活的控制,…

      2026年9月25日 • 用户投稿
      200
    • p5.js WebGL性能优化:首帧渲染耗时长的原因与对策

      p5.js WebGL性能优化:首帧渲染耗时长的原因与对策p5.js WebGL性能优化:首帧渲染耗时长的原因与对策p5.js WebGL性能优化:首帧渲染耗时长的原因与对策p5.js WebGL性能优化:首帧渲染耗时长的原因与对策

      在使用p5.js的WEBGL渲染模式时,首次调用image()函数渲染图片或p5.Graphics对象通常会比后续调用耗时显著增加。这主要是因为第一次渲染时,p5.js需要将图像数据从CPU内存上传到GPU的纹理内存中,涉及内存分配和数据复制,这是一个相对耗时的过程。后续调用由于纹理已被缓存,可以直…

      2026年9月25日 • 用户投稿
      700
    • 为什么不同浏览器对硬件加速的实现存在差异?

      不同浏览器因渲染引擎、图形API及权衡策略差异导致硬件加速表现不同。1. Blink、Gecko、WebKit引擎在图层管理与GPU任务分配上设计不同;2. 各浏览器通过ANGLE等抽象层适配DirectX、Vulkan、Metal,转换开销与支持程度影响性能;3. 厂商在性能、兼容性、稳定性间取舍…

      2026年9月25日
      100
    • 动态缓存键在Spring Boot中的实现教程

      动态缓存键在Spring Boot中的实现教程动态缓存键在Spring Boot中的实现教程动态缓存键在Spring Boot中的实现教程动态缓存键在Spring Boot中的实现教程

      本文介绍了如何在Spring Boot应用中实现基于请求参数的动态缓存键。通过直接操作CacheManager获取缓存对象,并使用cache.get(key, () -> …)方法,可以灵活地根据请求参数生成缓存键,从而实现更精细化的缓存控制。这种方法避免了直接修改缓存名称,而是专…

      2026年9月25日 • 用户投稿
      700
    • sublime怎么配置eslint进行js校验_sublime集成ESLint代码检查配置

      sublime怎么配置eslint进行js校验_sublime集成ESLint代码检查配置sublime怎么配置eslint进行js校验_sublime集成ESLint代码检查配置sublime怎么配置eslint进行js校验_sublime集成ESLint代码检查配置sublime怎么配置eslint进行js校验_sublime集成ESLint代码检查配置

      首先安装SublimeLinter和SublimeLinter-eslint插件,确保系统或项目中已安装ESLint;通过npx eslint –init生成配置文件;插件会自动调用项目内的eslint,若未识别可手动设置executable路径;保存JavaScript文件时即可实时显…

      2026年9月25日 • 用户投稿
      000
    • PHP文件引入时参数传递机制详解与最佳实践

      在php中,直接通过url查询字符串方式向`require`或`include`引入的文件传递参数是无效的,这会导致“未定义变量”错误。本文将深入探讨php文件引入的原理,并提供三种正确的参数传递方法:利用作用域共享、手动填充`$_get`数组,以及推荐的通过函数或类进行封装,旨在帮助开发者构建更健…

      2026年9月25日
      000
    • Safari浏览器怎么查看网页源代码_Safari浏览器网页HTML源代码查看方式

      Safari浏览器怎么查看网页源代码_Safari浏览器网页HTML源代码查看方式Safari浏览器怎么查看网页源代码_Safari浏览器网页HTML源代码查看方式Safari浏览器怎么查看网页源代码_Safari浏览器网页HTML源代码查看方式Safari浏览器怎么查看网页源代码_Safari浏览器网页HTML源代码查看方式

      首先启用Safari开发菜单,然后通过菜单命令或快捷键Option+Command+U查看完整HTML源代码;也可右键选择检查元素,使用Web检查器查看特定区域的DOM结构与样式信息。 如果您在浏览网页时需要检查页面的结构或调试内容,查看网页源代码是一个常用的方法。Safari浏览器提供了多种方式来…

      2026年9月25日 • 用户投稿
      000
    • Java 8 使用 Stream API 扁平化嵌套 Map 并提取首个元素

      Java 8 使用 Stream API 扁平化嵌套 Map 并提取首个元素Java 8 使用 Stream API 扁平化嵌套 Map 并提取首个元素Java 8 使用 Stream API 扁平化嵌套 Map 并提取首个元素Java 8 使用 Stream API 扁平化嵌套 Map 并提取首个元素

      本文将详细介绍如何使用 Java 8 的 Stream API 将一个嵌套的 Map 结构进行扁平化处理,并从中提取所需的数据。 具体来说,我们将把 Map<Integer, Map<String, List>> 转换为 Map,其中新 Map 的键是原内部 Map 的键,值…

      2026年9月25日 • 用户投稿
      1200
    • Chrome浏览器怎么禁止图片和视频自动加载_网页媒体内容自动加载禁用教程

      Chrome浏览器怎么禁止图片和视频自动加载_网页媒体内容自动加载禁用教程Chrome浏览器怎么禁止图片和视频自动加载_网页媒体内容自动加载禁用教程Chrome浏览器怎么禁止图片和视频自动加载_网页媒体内容自动加载禁用教程Chrome浏览器怎么禁止图片和视频自动加载_网页媒体内容自动加载禁用教程

      可通过设置阻止Chrome自动加载媒体。①针对特定网站:点击地址栏锁形图标→网站设置→将“自动播放”设为不允许;②全局禁用:进入chrome://settings/content→自动播放→设为默认不允许;③使用扩展如uBlock Origin拦截媒体加载;④启用Lite模式以节省数据并延迟媒体加载…

      2026年9月25日 • 用户投稿
      300
    • 修改 Android KeyStore 中 KeyPair 的用途

      修改 Android KeyStore 中 KeyPair 的用途修改 Android KeyStore 中 KeyPair 的用途修改 Android KeyStore 中 KeyPair 的用途修改 Android KeyStore 中 KeyPair 的用途

      本文档介绍了如何在 Android KeyStore 中修改现有 KeyPair 的用途,使其支持密钥协商 (Key Agreement) 操作。通过示例代码展示了如何利用 KeyStore.setEntry 方法在 Android 13 (API 33) 及以上版本中导入 KeyPair 并设置所…

      2026年9月25日 • 用户投稿
      600
    • 并发处理共享列表并收集结果的方案

      并发处理共享列表并收集结果的方案并发处理共享列表并收集结果的方案并发处理共享列表并收集结果的方案并发处理共享列表并收集结果的方案

      本文旨在介绍如何利用 Java 并行流高效地处理大型列表,尤其是在每个元素的处理过程耗时较长的情况下。并行流能够将列表分割成多个子任务,并在多个线程上并发执行,从而显著提升处理速度。但同时,并发编程也带来了共享资源同步的问题,需要谨慎处理。 使用并行流并发处理列表 假设我们有一个 Foo 类,其 p…

      2026年9月25日 • 用户投稿
      000
    • 高效并发处理共享列表与结果收集的Java教程

      高效并发处理共享列表与结果收集的Java教程高效并发处理共享列表与结果收集的Java教程高效并发处理共享列表与结果收集的Java教程高效并发处理共享列表与结果收集的Java教程

      本文介绍了如何利用Java并发特性,特别是并行流(Parallel Streams),来高效处理共享列表,并将处理结果进行收集。针对耗时操作,通过将列表分割成子列表,并利用并行流并发执行,可以显著提高处理效率。同时,强调了在并发环境下对共享资源进行同步的重要性,并提供了收集处理结果的示例代码。 在处…

      2026年9月25日 • 用户投稿
      000
    • 使用并行流并发处理共享列表并收集结果

      使用并行流并发处理共享列表并收集结果使用并行流并发处理共享列表并收集结果使用并行流并发处理共享列表并收集结果使用并行流并发处理共享列表并收集结果

      本文将探讨如何高效地并发处理共享列表,并收集处理结果。在处理大量数据时,将任务分解为多个子任务并行执行可以显著提高效率。Java 8引入的并行流(Parallel Streams)为我们提供了一种简洁而强大的方式来实现这一目标。 并行流简介 并行流是Java 8 Stream API的一个特性,它允…

      2026年9月25日 • 用户投稿
      400
    • 如何在微服务之间共享静态数据

      如何在微服务之间共享静态数据如何在微服务之间共享静态数据如何在微服务之间共享静态数据如何在微服务之间共享静态数据

      微服务架构的本质决定了微服务之间无法直接共享静态变量。正如上面摘要所说,每个微服务都是一个独立的进程,拥有自己的内存空间,静态变量只在其所属的进程内有效。试图在一个微服务中访问另一个微服务的静态变量,就像试图在一个独立的Java程序中访问另一个程序的变量一样,是不可能的。 微服务架构的独立性 微服务…

      2026年9月25日 • 用户投稿
      100
    • FineReport与.NET集成要点

      FineReport与.NET集成要点FineReport与.NET集成要点FineReport与.NET集成要点FineReport与.NET集成要点

      1、FineReport(FR)与.NET项目的集成主要涵盖三个核心部分,如上图所示。 2、报表发布是集成过程中的关键步骤之一。 3、需要注意的是,FR报表工程本质上是基于Java的Servlet应用,无法由IIS直接解析处理,因此必须将其部署在支持Servlet规范的Web应用服务器(如Tomca…

      2026年9月25日 • 用户投稿
      200

    发表回复

    登录后才能评论
    关注微信