JS的for循环动态渲染html只有最后一个元素生效?

Java基础系列-《流程控制--循环结构》 前言: 张浩Java考试成绩未达到自己的目标。为了表明自己勤奋学习的决心,他决定写一百遍“好好学习,天天向上!”根据前面学习的内容我们知道System.out.println(“好好学习,天天向上!”)可以将这句话打印出来,但是现在是要打印100次,那是不是我们需要写100次呢?答案肯定是否定的,在java中我们要避免写重读的代码,我们要尽量“偷懒”让代码能重复使用。那如何才能写一次输出语句,让它运行100次呢?接下来我们就要学习流程控制中的--循环结构。 一、什么是循环结构 1.循环简单理解就是重读 阅读详情
背景:

我想在html3个ul中动态生成5个子元素li

目标效果:

在这里插入图片描述

废话少说,代码梭起来~

1. 先写html结构
<section class="list-box">
    <ul id="myList"></ul>
    <ul id="myListOne"></ul>
    <ul id="myListTwo"></ul>
</section>
2. 动态渲染子元素li

不就是写个for循环呗,并且我还加了class属性item

for (var i = 1; i <= 5; i++) {
        var listItem = document.createElement("li");
        listItem.setAttribute('class', 'item')
        document.getElementById("myList").appendChild(listItem);
        document.getElementById("myListOne").appendChild(listItem);
        document.getElementById("myListTwo").appendChild(listItem);
    }
3. 失败,没达到预期效果

心想这个简单,很自信的打开浏览器查阅效果

哦豁?怎么回事?只有一列?

在这里插入图片描述

不应该呢,赶紧F12打开控制台查看

在这里插入图片描述

两个问号

  1. myList 和 myListOne 怎么没有渲染出子元素li呢?
  2. 为什么只有myListTwo渲染出来子元素?

返回查看代码

难道是 var定义变量的问题么?

好,修改成let

还是一样只有一列,有点迷了~

4. 查阅资料

查阅资料中…

嘿!好家伙 还真的找到了,开心!

MDN官方文档 API:appendChild
MDN官方文档 API:cloneNode

在这里插入图片描述

5. 分析原因

在每次迭代时,listItem都会被添加到myList、myListOne和myListTwo中。但是,由于 DOM (文档对象模型) 的规则限制,一个 DOM 元素节点在同一时刻只能存在于 DOM 树的一个位置。 也就是说,在每次循环迭代时,都需要创建新的li元素节点,而不是重复使用同一个listItem。因此,当listItem被添加到myListTwo之后,它就从myList和myListOne中被移除了,因为它已经成为了myListTwo的子元素。

6. 解决问题

两个解决办法:
(1). 用Node.cloneNode()api进行克隆一份副本,每个节点进行单独appendChild()

    for (let i = 1; i <= 5; i++) {
        let listItem = document.createElement("li");
        listItem.setAttribute('class', 'item')
        document.getElementById("myList").appendChild(listItem);
        
        let listItemOne = listItem.cloneNode(true); //true 深度克隆 li下面所有子节点
        listItemOne.setAttribute('class', 'item')
        document.getElementById("myListOne").appendChild(listItemOne);

        let listItemTwo = listItem.cloneNode(true);
        listItemTwo.setAttribute('class', 'item')
        document.getElementById("myListTwo").appendChild(listItemTwo);
    }

(2). 可以通过将listItem = document.createElement("li"),每个节点进行单独appendChild()

    for (let i = 1; i <= 5; i++) {
        let listItem = document.createElement("li");
        listItem.setAttribute('class', 'item')
        document.getElementById("myList").appendChild(listItem);


        let listItemOne = document.createElement("li");
        listItemOne.setAttribute('class', 'item')
        document.getElementById("myListOne").appendChild(listItemOne);

        let listItemTwo = document.createElement("li");
        listItemTwo.setAttribute('class', 'item')
        document.getElementById("myListTwo").appendChild(listItemTwo);
    }

查看效果,成功解决

在这里插入图片描述

7. 优化代码

上面两种解决办法都存在相同的代码,抽离出来

    // 定义一个创建并设置属性的函数
    function createListItem(className) {
        let listItem = document.createElement("li");
        listItem.setAttribute('class', className);
        return listItem;
    }

    // 在循环中调用函数创建并添加 <li> 元素
    for (let i = 1; i <= 5; i++) {
        let listItem = createListItem('item');
        document.getElementById("myList").appendChild(listItem);

        let listItemOne = createListItem('item');
        document.getElementById("myListOne").appendChild(listItemOne);

        let listItemTwo = createListItem('item');
        document.getElementById("myListTwo").appendChild(listItemTwo);
        
        let listItemTwo = createListItem('item');
        document.getElementById("myListTwo").appendChild(listItemTwo);
    }

溜了~
继续写BUG~

Python Selenium爬虫实战:破解JS动态渲染页面数据抓取难题 在Web数据抓取领域,传统基于HTTP请求的爬虫技术(如requests、Scrapy)面临一个普遍挑战:现代前端框架(Vue、React)广泛应用JavaScript动态渲染,导致服务器返回的初始HTML中不包含完整数据,数据需经浏览器执行JS后才能生成。这种异步加载机制使得静态抓取方法失效。其核心原理在于页面内容通过AJAX、Fetch API等技术异步获取并动态插入DOM。为应对此挑战,浏览器自动化工具应运而生,它通过模拟真实用户操作,控制浏览器完整加载并执行JS,从而获取最终渲染后的页面内容。这在电 阅读详情

相关推荐

Selenium实战:破解B站动态评论采集难题,从动态渲染到数据抓取

动态网页数据采集是爬虫领域的常见挑战,其核心在于页面内容通过JavaScript异步加载和渲染,传统的静态HTML解析方法往往失效。其原理是浏览器执行JS脚本后,才将数据填充至DOM树中。为应对此挑战,Selenium等浏览器自动化工具应运而生,它们通过模拟真实用户操作,直接控制浏览器获取渲染后的完整页面,为数据采集提供了稳定可靠的解决方案。在数据分析、舆情监控、市场研究等应用场景中,高效获取动态内容至关重要。本文聚焦于利用Selenium构建Bilibili动态评论采集方案,详细阐述了如何应对反爬机制、优

weixin_33693070的博客 305

js 将js中数据动态渲染到html页面

js 将js中数据动态渲染到html页面 css代码 <style> *{ margin: 0; padding: 0; } table{ width: 300px; text-align: center; } </style> html代码 <table border="1" cellspacing="0"

weixin_46287150的博客 1万+

使用JavaScript的forEach方法回显后台数据

希望本文能对你有所帮助!然后,我们使用forEach方法遍历数据,并为每个数据项创建一个li元素,设置相应的文本内容,最后将这个li元素添加到数据展示容器中。首先,我们需要获取加载数据的按钮和数据展示容器的引用。接下来,我们需要在前端创建一个HTML文件,其中包含一个用于展示数据的容器(比如一个ul元素),以及一个用于加载数据的按钮(比如一个button元素)。现在,我们可以在浏览器中打开HTML文件,点击“加载数据”按钮,即可看到后台数据被成功回显在页面上,每条数据显示为一个列表项,包含姓名和年龄信息。

TechNovaX的博客 391

原生js非侵入式循环渲染HTML模板

根据json循环渲染HTML模板,支持嵌套数据的渲染,支持枚举值映射

zhangzhibinshuai的博客 1191

渲染动态数据到HTML页面的前端技术

在现代的Web开发中,动态数据的渲染是前端开发中非常重要的一个方面。在上述示例中,我们首先获取了一个id为"myList"的ul元素,然后使用forEach方法遍历数据数组,并创建li元素来表示每个数据项。最后,将li元素添加到ul元素中。在上述示例中,我们首先在HTML中定义了一个id为"app"的div元素,然后使用v-for指令来遍历数据数组,并将数组中的每个元素渲染为li元素。在上述示例中,我们定义了一个函数组件App,其中使用map方法遍历数据数组,并将数组中的每个元素渲染为li元素。

AvskBug的博客 924

动态添加Bootstrap Select元素

本文介绍了如何动态添加Bootstrap Select元素并正确初始化的方法。当通过JavaScript动态创建带有selectpicker类的下拉选择框时,需要手动调用selectpicker()方法进行初始化。文章详细演示了创建select元素、添加选项、插入DOM并初始化的完整流程,解决了动态UI元素无法自动应用Bootstrap样式的问题。该方法适用于各种需要动态生成表单元素的场景。

m0_62153576的博客 137

【转】解决for循环中只能点击到最后一个元素的问题

有时候我们需要对一排元素进行逐一选中,比如下面一个例子中,我们想要当点击一排按钮中的某一个时,利用下面的写法,都是只能弹出最后一个元素。 <body> <button>按钮1</button> <button>按钮2</button> <button>按钮3</button> <button>...

魂-淡 1517

07-利用循环实现列表的渲染.html

07-利用循环实现列表的渲染

解决append添加元素只生效一次的问题

解决append添加元素只生效一次的问题 情景:当请求到一个对象数组,里面有img路径和文本,目的是把所有的路径和文本通过拼接添加到指定元素 情景再现 这是我拿到的数据格式 // getData = 上图数据 for (var i = 0; i < getData.text.split(",").length; i++) { // 由于img数组的长度和text数组长度不一样,在这里做了次判断,所以用到了两次append方法 if (imgUrl[i] !== unde

qq_39227097的博客 1704

jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例

主要介绍了jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作,结合实例形式分析了jQuery+Ajax请求json格式数据并渲染到html页面相关步骤与操作技巧,需要的朋友可以参考下

Tessent实战:网表扫描链插入全流程解析

本文详细解析了使用Tessent工具为网表插入扫描链(Scan Chain)的全流程。从前期环境配置、网表检查,到扫描链数量、时钟域等核心配置,再到执行扫描单元替换与连接,最后进行结果验证与文件输出。文章提供了关键命令与实用技巧,帮助工程师高效完成DFT设计,确保芯片可测试性。

hhh00的博客 746

vue+css——vue项目中渲染遍历生成html结构,css样式不生效问题解决——基础积累

vue+css——vue项目中渲染遍历生成html结构,css样式不生效问题解决——基础积累

yehaocheng520的博客 1546

【AutoDL】使用云服务器跑深度学习代码

1.算力市场 租用服务器,选择自己心仪的服务器2.镜像可以选择一些基础的镜像,社区镜像里是git上有的环境。3.上传文件在文件存储中,选择上传的区,在右边点击上传,选择自己的文件上传到云服务器中。

weixin_45768644的博客 3701

for循环里面有异步操作_Javascript异步编程(一)初识异步

同步和异步关于同步和异步,我们先来看两个例子。const async=()=>{ console.log('async..',1) let t=new Date(); while (true){ if(+new Date()-t>=2000){ console.log('async...',2) break } } conso...

weixin_29784009的博客 1011

SAP Event Mesh 简介

Get Started with Messaging for Decoupled Communication Step 1: What is the SAP Event Mesh service? SAP Event Mesh 是一种完全托管的服务,用于连接应用程序、服务和系统,以便它们可以通过消息和事件相互交互。 它通过引入中央消息代理取代了传统的点对点通信。 虽然点对点通信适用于在有限数量的发送方和接收方之间共享数据,但可扩展性很快就会成为一个问题。 SAP Event Mesh 解决了这个问题,并确保

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1243

使用 Visual Studio Code 搭建 SAP UI5 本地开发环境

工欲善其事,必先利其器。时至今日,SAP 提供了非常多的 SAP UI5 开发工具,既包含本地搭建的,也包含浏览器里远端使用的工具,比如 WebIDE 和 Business Application Studio. 我们访问下面这个链接,就能找到所有这些工具的安装或者配置步骤: https://tools.hana.ondemand.com/#sapui5 如果想选择本地开发,SAP 推荐的工具是 Visual Studio Code,也就是本文要介绍的内容。 也可以下载 WebIDE 的本地安装包,将其安

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1万+

【转载】Swiper 动态渲染数据,Loop 属性不生效

转载大佬的文章 解决了,找了许久的问题。 原理跟大佬一样,通过v-if指令,来延迟 swiper 的注入到DOM树中。 错开 swiper 的注入时间。 // HTML 模板 <swiper v-if="swt" :options="swiperOption" ref="mySwiper"> <swiper-slide v-for="item in imgLinks" :key="item.id"> <img :src="item.hyperlink"

为了不卡头的博客 1567

用 CDS 作为 Referenced Data Source 开发 SAP Gateway OData 服务,一条更轻的 SEGW 路线

本文介绍了SAP Gateway项目中从传统手工建模到基于CDS View的现代化开发方式转变。主要内容包括: 传统方式需要在SEGW中手动创建Entity Type、Entity Set等元素,并在DPC_EXT中编写大量查询逻辑,存在模型层和业务逻辑重复表达的问题。 7.50版本后,SAP Gateway与ABAP CDS深度集成,可通过SEGW直接引用CDS View作为数据源,自动生成数据模型和SADL读取逻辑,支持完整的OData查询功能。 最佳实践建议通过Consumption View而非直接

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 703

从浏览器输入URL到页面渲染:揭秘HTML、CSS和JavaScript的协同工作原理(附流程图解)

本文深入解析从浏览器输入URL到页面渲染的全过程,详细介绍了HTML、CSS和JavaScript的协同工作原理。涵盖DNS解析、DOM构建、CSSOM计算、渲染树生成、布局绘制等关键步骤,并探讨了现代前端架构和性能优化技巧,帮助开发者深入理解网页渲染机制。

weixin_29008691的博客 256

YOLO26-Quantized:面向国产AI芯片的全栈量化方案,适配昇腾310P与寒武纪MLU270

在算力国产化替代的行业趋势下,昇腾310P、寒武纪MLU270已成为工业边缘视觉、智能检测场景的主流国产AI芯片选型。针对原生YOLO26模型在国产芯片上推理效率低、算子兼容性差、量化精度塌陷三大核心痛点,本文提出YOLO26-Quantized全栈量化方案,覆盖训练感知量化(QAT)、离线静态量化(PTQ)、模型编译优化、芯片专属部署全流程。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 762

7.工具高级参数—CogPMAlignTool

CogPMAlign工具是用于图像模式匹配的视觉检测工具,主要包含训练参数和运行参数两类设置。训练参数包括弹性参数(处理图像非线性变形,建议不超过8像素)和特征粒度限制(控制边缘点密度)。运行参数涉及对比度阈值(影响特征点识别)、自动边缘阈值、接受阈值(0-1.0分值判定匹配有效性)和XY重叠(过滤重叠结果)等关键设置。该工具通过PatMax/PatQuick算法实现模板匹配,匹配分数0-1.0反映匹配度,受模板形状匹配度、自由度、特征缺失等因素影响。通过合理配置参数,可在执行速度和匹配精度间取得平衡,最高

935

vuejs的render渲染函数

官网文档地址:https://cn.vuejs.org/v2/guide/render-function.html 引入:         vue推荐绝大数情况下实验template创建 html,但是我们时常在vue开发需要动态的生成页面,这就是rendered函数,它比template更接近编译器          前面的博客有介绍过slot,它具备将语句中html显示对应slot的位置

z1340954953 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Element动态渲染表格

话不多说直接上代码 html代码 1,tableData是整个表格渲染所需要用到的数据 2,theadData是经过处理后需要动态渲染的数据,在渲染的时候也可以绑定id便于后面的修改提交操作 在这里需要添加元素来回切换显示隐藏操作后的界面,实现的效果如下: 1,以下是渲染后的界面 2,以下是要进行某一个表个头进行修改时的界面 在input绑定blur事件或者也可以绑定回车事件,在失去焦...

qq_39927511的博客 931

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Python动态网页表格爬取:一行render()解决90%的pandas.read_html空列表问题

HTML表格解析是数据采集的基础能力,其核心原理在于识别语义化<table>标签并还原行列结构。传统requests+BeautifulSoup仅能获取静态HTML源码,而现代网页普遍采用React/Vue等框架动态渲染,导致pandas.read_html()返回空列表。该技术通过轻量级JS执行环境补全真实DOM,使静态解析器获得可解析的完整HTML,兼具Selenium的渲染能力与requests的简洁性。适用于教务系统、招标平台、股价行情等含AJAX/SPA结构的业务场景,尤其解决初学者‘页面明明有表

weixin_30325487的博客 439

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Flask Web开发实战:从静态页面渲染到动态路由跳转

本文详细介绍了Flask Web开发实战,从静态页面渲染到动态路由跳转的全过程。通过实例代码展示了如何使用Flask渲染HTML页面、配置动态路由以及实现页面跳转的三种方式,帮助开发者快速掌握Flask框架的核心功能。文章还提供了构建个人博客系统的实战案例,涵盖项目结构、基础模板、核心路由和数据库交互等内容,适合Web应用开发初学者和进阶者参考。

java天气 431
上一篇: 开发轻量级REST API样板 基于Node.js、MongoDB 通过Mongoose驱动
下一篇: 让人震惊的网站合集
书中枫叶
博客等级 码龄7年 91粉丝 24原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值