如何在JavaScript中将数组数据动态显示为DOM列表元素

如何在JavaScript中将数组数据动态显示为DOM列表元素

本教程详细介绍了如何使用javascript将存储在数组中的数据动态地渲染到html的无序列表(`

`)中,形成一系列列表项(“)。文章涵盖了从html结构到javascript逻辑的完整实现步骤,包括数据保存、列表构建和dom更新,并特别强调了使用`innerhtml`时潜在的安全风险及其防范措施。

在Web开发中,经常需要将动态数据(例如从用户输入或API获取的数据)显示在网页上。将JavaScript数组中的数据以列表形式呈现在DOM中是一个常见需求。本教程将指导您如何高效且安全地实现这一功能。

1. 核心概念:动态生成HTML字符串

要将数组内容显示为列表,我们需要遍历数组,为每个元素创建一个HTML

标签,然后将这些标签组合成一个完整的HTML字符串,最后将其插入到DOM中的 元素内。

2. HTML结构准备

首先,我们需要一个HTML结构来承载我们的输入、操作按钮以及最终的列表显示区域。

在这个结构中:

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

用于用户输入数据。 是我们将动态生成 元素并插入的目标位置。

3. JavaScript逻辑实现

接下来,我们将编写JavaScript代码来处理数据存储、列表生成和DOM更新。

3.1 初始化与DOM元素引用

首先,定义一个数组来存储数据,并获取DOM元素的引用。

let linksArray = []; // 存储链接数据的数组let inputEl = document.getElementById("input-el"); // 获取输入框元素let displayEl = document.getElementById("display_link-el"); // 获取显示列表的ul元素// 尝试从localStorage加载数据(如果存在)// 这部分代码在原始问题中没有给出,但通常会考虑持久化数据const mylinks = JSON.parse(localStorage.getItem("mylinks"));if (mylinks) {  linksArray = mylinks;  // 页面加载时立即显示已保存的链接  displayEl.innerHTML = convertToListLi(linksArray);}

3.2 保存数据到数组并更新DOM

save 函数负责将用户输入添加到 linksArray,更新 localStorage,然后调用列表转换函数并更新DOM。

function save() {  // 检查输入是否为空,避免添加空链接  if (inputEl.value.trim() !== "") {    linksArray.push(inputEl.value);    console.log(linksArray); // 方便调试    // 将数组保存到localStorage,JSON.stringify用于将JS数组转换为字符串    localStorage.setItem("mylinks", JSON.stringify(linksArray));    inputEl.value = ""; // 清空输入框    // 调用函数将数组转换为HTML列表字符串,并更新displayEl的innerHTML    displayEl.innerHTML = convertToListLi(linksArray);  } else {    alert("请输入有效的链接!");  }}

3.3 核心功能:将数组转换为HTML列表字符串

convertToListLi 函数是实现动态列表显示的关键。它遍历 linksArray,为每个元素生成一个

标签,并将它们拼接成一个完整的HTML字符串。

function convertToListLi(arr) {  let listItems = ""; // 初始化一个空字符串来存储所有
  • 标签 for (let i = 0; i < arr.length; i++) { // 拼接每个
  • 标签。注意:这里可以添加链接的标签等 listItems += "
  • " + arr[i] + "
  • "; } return listItems; // 返回包含所有
  • 标签的完整HTML字符串}
  • 3.4 删除功能(可选但常见)

    虽然原始问题中未详细实现删除逻辑,但一个完整的教程通常会包含它。这里提供一个简单的删除所有链接的示例。

    function delLeads() {  // 双击删除所有链接  localStorage.clear(); // 清空localStorage  linksArray = []; // 清空数组  displayEl.innerHTML = ""; // 清空DOM显示  console.log("所有链接已删除。");}

    4. 完整代码示例

    将上述HTML和JavaScript代码整合,您可以得到一个功能完整的页面。

    5. 注意事项与安全考量

    XSS (跨站脚本攻击) 风险:当使用 element.innerHTML = someHTMLString 来插入用户生成的内容时,存在潜在的跨站脚本攻击(XSS)风险。如果 linksArray[i] 包含恶意脚本(例如 alert(‘XSS’)),它将被浏览器执行。

    防范措施:

    输入过滤/转义: 在将用户输入添加到数组或插入DOM之前,始终对输入进行严格的过滤和HTML实体转义。例如,将 转换为 >。使用 textContent 或 document.createElement: 对于纯文本内容,使用 element.textContent 更安全,因为它会自动转义特殊字符。对于更复杂的结构,推荐使用 document.createElement()、appendChild() 等DOM API来构建元素,而不是直接拼接HTML字符串。

    示例:使用 document.createElement 的更安全方法

    这种方法虽然代码量稍多,但由于它直接操作DOM对象而非解析HTML字符串,因此大大降低了XSS风险。

    总结

    本教程详细展示了如何利用JavaScript将数组数据动态地渲染为DOM中的列表元素。我们学习了如何构建HTML字符串并使用 innerHTML 更新DOM,同时强调了在使用 innerHTML 插入用户内容时必须注意XSS安全风险,并介绍了更安全的 document.createElement 方法作为替代方案。掌握这些技术是进行动态Web开发的基础。

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

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

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2025年12月23日 06:18:25
    下一篇 2025年12月23日 06:18:44

    相关推荐

    • jQuery教程:利用.closest()与属性选择器精准隐藏父级元素

      本教程详细介绍了如何利用jquery的`.closest()`方法,结合css属性选择器,精确地定位并隐藏dom结构中特定子元素的父级元素。通过具体的代码示例,我们将演示如何从一个具有特定属性(如`name`)的内层元素出发,向上遍历dom树,找到并操作其最近的匹配父级元素。 在前端开发中,我们经常…

      2025年12月23日
      000
    • 跨浏览器实现鼠标悬停时显示滚动条且不影响内容对齐

      本教程旨在解决在Web开发中,鼠标悬停容器时显示滚动条但避免内容布局偏移的常见挑战。通过利用CSS的scrollbar-gutter: stable属性,我们能确保滚动条出现时不会挤压内容,从而在所有主流浏览器中提供一致且流畅的用户体验,有效规避了传统overflow:auto和overflow:o…

      2025年12月23日 好文分享
      000
    • Django模板中安全渲染指定HTML标签:使用Bleach库进行精细化控制

      在django应用中,当需要用户输入html并仅允许特定标签(如“, “)时,直接使用`safe`过滤器存在xss风险。本文将介绍如何利用`bleach`库,通过定义允许标签列表来安全地清洗用户输入的html,从而有效防止跨站脚本攻击,并确保只有经过授权的html内容被渲染。 用户输入HTML的…

      2025年12月23日 好文分享
      000
    • 前端开发中 DIV 元素每行字符数的管理与精确计数

      本文旨在探讨如何在网页设计中管理和精确计算 `div` 元素内每行的字符数。我们将介绍两种主要方法:一是利用 css `ch` 单位进行近似限制,适用于对字符数有大致要求且不需精确计数的场景;二是使用 javascript 动态监测元素高度变化,实现每行字符的精确计数,包括处理换行逻辑和排除空格等进…

      2025年12月23日
      000
    • 使用Selenium抓取网页中关联的H2标题及其段落内容

      本教程详细介绍了如何利用selenium和xpath定位策略,高效地从html文档中抓取具有层级关系的h2标题及其后续所有p标签内容。通过构建一个字典结构,将h2标题作为键,其关联的p标签文本聚合为值,最终实现将非结构化网页内容转化为结构化的标题与内容对,并提供了完整的python代码示例。 在网页…

      2025年12月23日 好文分享
      000
    • 解决JavaScript中innerHTML内容闪烁消失的问题

      当通过javascript动态更新网页内容(如使用`innerhtml`)后,内容立即闪烁并消失,这通常是由于html表单的默认提交行为导致的页面重载。要解决此问题,核心在于阻止表单的默认提交事件,确保javascript代码执行后页面不会刷新,从而使动态内容得以保留。 理解问题:innerHTML…

      2025年12月23日
      000
    • 如何使用 JavaScript 对从 JSON 文件中提取的变量求和

      本教程旨在指导开发者如何使用 JavaScript 和 jQuery 从 JSON 文件中提取数据,并对提取的数值变量进行求和,最终将结果展示在网页上。我们将通过一个实际案例,演示如何从 Strava 活动数据 JSON 文件中提取跑步距离,并计算过去五次活动的跑步总距离,然后将总距离显示在表格中。…

      2025年12月23日
      000
    • CSS :hover 反向动画:实现平滑进入与离开效果

      本教程探讨如何利用css `transition`属性,实现元素在鼠标悬停(:hover)时的平滑进入动画,以及鼠标离开时同样平滑的反向动画。核心在于将`transition`属性应用于目标元素本身而非仅其`:hover`状态,确保动画在两种状态转换时都能被触发,从而避免元素突然消失的问题,无需ja…

      2025年12月23日
      000
    • CSS :hover 反向动画:实现平滑过渡的技巧

      本文将探讨如何使用css `transition` 属性实现 `:hover` 状态的平滑反向动画。通过将 `transition` 属性应用于元素的基础状态而非 `:hover` 伪类,开发者可以确保鼠标移入和移出时动画均能流畅展现,从而避免元素在鼠标离开时突然恢复原状的问题,提升用户体验,无需依…

      2025年12月23日
      000
    • 使用CSS过渡和JavaScript实现平滑动画弹出窗口教程

      本教程详细指导如何通过html结构、css样式与过渡效果以及javascript事件处理,创建一个具有平滑缩放和淡入动画的模态弹出窗口。文章将重点讲解如何利用`opacity`、`visibility`和`transform`属性实现专业的开合动画,并提供完整的代码示例及实践建议,帮助开发者构建用户…

      2025年12月23日
      000
    • CakePHP 4.x Flash 消息 ‘V’ 字符前缀异常排查与解决

      在使用 cakephp 4.x 的 flash 成功消息时,有时会遇到消息前出现一个不必要的 ‘v’ 字符。这通常是由于 webroot/css/home.css 中定义的 .success::before 伪元素被错误地应用到非主页的 flash 消息上所致,该规则可能依赖…

      2025年12月23日
      000
    • CSS深度解析:div背景图片设置与多层图像叠加技术

      本教程详细阐述了如何在html `div`元素中设置背景图片,即使该`div`已包含内容。文章涵盖了基础的背景图片应用,通过`background-image`、`background-size`等属性实现单层背景,以及更高级的多层图像叠加技术,利用css伪元素(如`::before`)和`z-in…

      2025年12月23日
      000
    • CSS与JavaScript实现平滑过渡动画弹出框教程

      本教程将详细指导您如何使用html、css和javascript创建一个具有平滑过渡效果的动画弹出框,类似于特定网站上的交互体验。我们将重点讲解css动画属性(如`transition`、`transform`和`opacity`)的巧妙运用,以及javascript如何控制弹出框的显示与隐藏,确保…

      2025年12月23日
      000
    • Django应用中安全处理用户输入HTML:限制特定标签的实践指南

      在web应用中,直接显示用户输入的html内容存在跨站脚本(xss)风险。django的`safe`过滤器虽然能标记内容为安全,但无法限制特定标签,可能引入漏洞。本文将介绍如何利用python的`bleach`库,实现对用户输入html的精细化控制,仅允许`、、、、`等预定义的安全标签,从而有效防范…

      2025年12月23日
      000
    • 深入理解CSS定位:解决幻灯片导航箭头溢出父容器的布局问题

      本教程将深入探讨css `position`属性在web布局中的应用,特别关注如何解决使用`position: absolute`时元素(如幻灯片导航箭头)溢出其父容器的问题。通过理解`position: relative`和`position: absolute`的工作原理,我们将学习如何确保子元…

      2025年12月23日
      000
    • Python f-string在KML描述中动态生成HTML内容

      本教程旨在指导如何在python循环中,利用f-string将列表中的动态数据高效地嵌入到kml点的html描述中。通过一个具体的示例,我们将展示如何将python列表中的地点名称动态地插入到html “ 标签下方的文本中,从而实现个性化的地理信息展示,确保数据与html结构的无缝集成。 在地理信…

      2025年12月23日 好文分享
      000
    • CSS布局:实现子元素文本底部对齐的策略

      本教程详细介绍了如何利用css的`position`属性,在父容器的子元素中实现文本内容的底部对齐。核心方法是为父容器设置`position: relative`以建立定位上下文,然后为需要底部对齐的文本元素(或其直接父级)设置`position: absolute`和`bottom: 0`,从而精…

      2025年12月23日
      000
    • 解决JavaScript中innerHTML内容在表单提交后“闪烁”消失的问题

      本文探讨了在使用javascript更新`innerhtml`后,内容在表单提交时短暂显示后消失的常见问题。核心原因是html表单的默认提交行为会导致页面重载,从而清除所有动态更改。教程将通过`event.preventdefault()`方法提供解决方案,确保`innerhtml`的更新持久有效,…

      2025年12月23日
      000
    • Spring Boot 控制器接收HTML表单数据:无需POJO的实践指南

      本文详细阐述了如何在spring boot应用中,无需创建pojo类或jsp页面,直接通过html表单将数据发送到控制器。主要介绍了两种方法:一是利用html表单的`action`属性配合spring的`@requestparam`注解进行直接提交;二是使用javascript(如fetch api…

      2025年12月23日
      000
    • JavaScript教程:在数组的自定义范围内随机选择元素

      本文详细介绍了如何在javascript数组的指定起始和结束索引之间,高效且准确地随机选取一个元素。我们将探讨常见错误(如nan的产生原因)并提供正确的数学公式和代码实现,确保开发者能够轻松实现数组局部范围内的随机数据抽取功能。 在JavaScript开发中,经常需要从数组中随机选取一个元素。更进一…

      2025年12月23日
      000

    发表回复

    登录后才能评论
    关注微信