如何将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)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2025年12月23日 06:43:46
    下一篇 2025年12月23日 06:44:01

    相关推荐

    • html源码怎么保存为网页项目_html源码保存为网页项目的技巧

      首先创建项目文件夹并保存HTML源码为.html文件,接着提取CSS、JavaScript和图片等外部资源,分别存入css、js和images子目录,最后通过浏览器打开HTML文件验证页面是否正常显示。 如果您已经获取了HTML源码,想要将其保存为一个完整的网页项目以便后续编辑或部署,则需要正确组织…

      好文分享 2025年12月23日
      000
    • jQuery与纯CSS实现多元素独立悬停提示效果教程

      针对多个div元素同时显示悬停提示及背景高亮的问题,本文详细介绍了两种解决方案。首先,通过优化jquery事件处理中的this关键字和find()方法,实现精确控制单个元素。其次,推荐使用纯css的:hover伪类,提供更简洁、高性能的实现方式,并修正了html结构中的嵌套错误,确保每个悬停提示独立…

      2025年12月23日
      000
    • html如何预览pdf_HTML内容关联PDF预览(链接/嵌入)方法

      使用iframe嵌入PDF是网页预览的常用方法,兼容性好且支持多数现代浏览器;通过src属性指定PDF路径,设置宽高并添加fallback提示;也可用超链接在新标签页打开PDF,适合轻量场景;结合URL参数可控制工具栏、页面跳转和缩放;需确保服务器配置正确MIME类型,兼顾移动端与旧浏览器兼容性。 …

      2025年12月23日
      000
    • HTML图片如何实现鼠标悬停动画_HTML图片鼠标悬停动画效果

      使用CSS的:hover伪类结合transform和transition属性,可实现图片悬停时的放大、旋转、移动或透明度变化等动画效果。1. HTML中为img标签添加class;2. CSS设置transition定义动画过渡,如transform: scale(1.1)实现放大;3. 可扩展ro…

      2025年12月23日
      000
    • Flexbox布局对齐失效?深入解析HTML结构与容器配置

      本文旨在解决flexbox布局中常见的对齐问题。核心在于指出并纠正html结构中嵌套flex容器的错误,并强调flexbox属性仅作用于其直接子元素。通过正确组织html结构并合理配置css,可确保flex项目按预期对齐,避免因结构不当导致的布局混乱。 Flexbox布局基础与对齐原理 Flexbo…

      2025年12月23日
      000
    • 解决Three.js画布不渲染:一个常见的函数调用遗漏

      本文旨在解决three.js项目中画布不显示渲染内容的问题,尤其针对初学者常犯的错误——定义了初始化函数却忘记调用它。通过一个具体的代码示例,我们将演示如何正确地设置和执行three.js场景,确保渲染器能够将内容呈现在屏幕上,并提供一些调试和最佳实践建议。 在使用Three.js构建3D场景时,开…

      2025年12月23日
      000
    • 如何正确动态设置背景:避免background属性覆盖问题

      在网页开发中,动态设置元素背景时,使用css `background` 简写属性可能导致背景图片被颜色覆盖的问题。本文将深入探讨这一常见陷阱,解释为何简写属性会覆盖特定属性,并提供一种稳健的javascript解决方案,通过分别设置`background-image`和`background-col…

      2025年12月23日
      000
    • 生成临时文件并在新标签页中打开

      本教程旨在解决如何在PHP中生成临时HTML文件,并在不暴露服务器文件路径的情况下,将其在新标签页中打开以供打印或预览的问题。核心思路是利用JavaScript在客户端动态创建新页面,并将HTML内容直接写入该页面,避免了服务器端生成文件的需求,提高了安全性并简化了流程。 使用JavaScript动…

      2025年12月23日
      000
    • JavaScript简易计算器运算符失效问题与修正指南

      本文旨在解决javascript简易计算器中常见的运算符失效问题。核心内容包括识别并修正用户输入运算符被意外覆盖、条件判断中使用赋值运算符而非比较运算符,以及函数调用时参数错误等问题。通过详细分析和提供修正后的代码示例,帮助读者构建一个功能正确的计算器,并加深对javascript基础语法和逻辑的理…

      2025年12月23日
      000
    • html本地存储缓存数据如何删除_html本地存储缓存数据删除的快速操作

      1、可通过开发者工具清除LocalStorage数据;2、执行javascript:localStorage.clear()可快速清空本地存储;3、SessionStorage可通过控制台或面板手动清除;4、浏览器设置中可批量删除缓存与网站数据,释放空间并修复异常。 如果您发现本地存储中的缓存数据占…

      2025年12月23日
      000
    • JavaScript 简易计算器常见错误与调试指南

      本文旨在解决javascript简易计算器中常见的运算符失效问题,特别是计算器只执行加法运算的错误。文章将深入剖析导致该问题的两个核心原因:用户输入运算符变量被错误覆盖,以及条件判断中误用赋值运算符而非比较运算符。通过详细的代码示例和修正,帮助开发者构建功能正确的计算器,并强调javascript中…

      2025年12月23日
      000
    • Flexbox布局:实现多行文本标签右置的单选框样式

      本教程详细阐述了如何使用css flexbox布局,将多行文本标签准确地放置在单选框(radio button)的右侧,并确保文本顶部与单选框对齐。通过优化html结构并将输入框与标签分离,配合flexbox的`display: flex`、`gap`和`align-self: flex-start…

      2025年12月23日
      000
    • html外部链接怎么打_html外部链接如何打专业指南

      答案:使用标签并设置href属性可添加外部链接,推荐配合target=”_blank”和rel=”noopener”在新窗口安全打开,同时优化链接文本与title属性以提升可访问性和SEO。 在HTML中添加外部链接非常简单,关键在于正确使用。 2. …

      2025年12月23日
      000
    • html页脚链接怎么打_html页脚链接如何打简单方法

      使用footer标签结合a标签可轻松创建页脚链接,先用语义化footer定义区域,再添加版权信息、内外链及邮箱链接,并通过CSS美化样式,确保路径正确即可。 在HTML页面中添加页脚链接很简单,只需要使用标准的 a 标签(锚标签)结合页脚结构即可。下面是一个简单实用的方法,适合初学者快速上手。 1.…

      2025年12月23日
      000
    • html如何放大表格_HTML表格(table)放大(缩放/CSS)方法

      最常用方法是通过CSS调整表格尺寸和缩放效果。1. 增大width、font-size和padding可提升可读性;2. 使用transform: scale()实现整体放大,需设置transform-origin避免偏移;3. 响应式场景推荐用rem、em等相对单位适配不同设备,保证布局稳定与视觉…

      2025年12月23日
      000
    • 使用 R 提取新闻文章中的有效文本

      本文介绍如何使用 R 语言提取网页中的有效文本内容,去除无关的 HTML 标签、特殊字符和非文本信息。通过结合 `htm2txt`、`quanteda` 和 `qdapDictionaries` 等 R 包,实现从网页抓取文本并过滤掉非英文单词,从而获得更干净、更易于分析的文章内容。 在进行文本分析…

      2025年12月23日
      000
    • 如何在网页上实现联系人添加到手机通讯录功能

      本文深入探讨了从网页直接将联系人信息添加到Android/iOS手机通讯录的挑战与限制。尽管深度链接能打开原生应用,但出于安全和隐私考量,网页无法直接调用原生API写入联系人数据。文章将提供一种可行的替代方案:通过vCard文件下载实现联系人信息的导入,并详细介绍其实现方法和注意事项。 网页直接添加…

      2025年12月23日
      000
    • 打造带预览效果的超链接:CSS悬停技巧

      本文将指导你如何使用CSS为超链接添加预览效果,类似于在社交媒体上分享链接时自动出现的预览卡片。通过CSS的`hover`伪类和`display`属性,我们可以实现当鼠标悬停在链接上时,显示一个包含页面预览信息的隐藏区域。 为网页上的链接添加预览功能可以显著提升用户体验,让用户在点击链接之前就能大致…

      2025年12月23日
      000
    • Vue.js 路由与组件交互:常见问题诊断与解决方案

      本文旨在解决vue.js项目中`router-link`不生效、路由配置错误及组件数据获取与渲染不当等常见问题。通过详细解析vue router的正确配置、`router-view`的使用,以及组件内数据异步获取、状态管理与模板绑定的优化,帮助开发者构建功能完善、交互流畅的单页应用。 在Vue.js…

      2025年12月23日
      000
    • 如何优雅地结束加载动画并切换到下一个页面

      本文档将指导你如何使用 HTML、CSS 和 JavaScript 创建一个页面加载动画,并在页面完全加载后平滑地隐藏该动画,从而实现无缝的用户体验。我们将提供完整的代码示例,并解释如何根据你的需求调整加载动画的持续时间和样式。通过本文学习,你将能够为你的网站添加专业的加载效果,提升用户满意度。 创…

      2025年12月23日
      000

    发表回复

    登录后才能评论
    关注微信