JS 三种添加元素的方式、区别( write、createElement、innerHTML )

文章目录

  • [1. 区别结论](#1. 区别结论)
  • [2. write 不同场合的效果](#2. write 不同场合的效果)
  • [3. createElement 和 innerHTML 耗时对比](#3. createElement 和 innerHTML 耗时对比)

1. 区别结论

方式 说明
document.write 不建议使用, 使用时要小心, 不同场合, 效果不同
document.createElement 添加少量元素时建议使用, 结构清晰易读
innerHTML 添加大量元素时建议使用

2. write 不同场合的效果

① 正常文档流中使用,会在原文档流内追加元素。
② 回调函数中使用,会按照 document.write 的内容重绘画面, 之前文档流内容会被覆盖。

正常文档流中使用:

回调函数中使用:

3. createElement 和 innerHTML 耗时对比

1. 添加少量元素时的耗时对比:
我自己试几次 createElement 能稍快一点, 但是因为数据量小, 所以差距可以忽略不记, 差距不大的情况下, 我建议使用 createElement, 因为更易读、更灵活。

2. 当插入的元素非常多时, 两者区别还是比较明显的, 下面为实验代码:

① document.createElement 耗时实验代码:

html 复制代码
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>页面添加元素</title>
</head>
<body>
<script>
  window.addEventListener('load', () => {

    let body = document.body
    let start = new Date()

    for (let i = 0; i < 10000; i++) {
      let ele = document.createElement("div")
      ele.style.width = '10px'
      ele.style.height = '10px'
      ele.style.border = '1px solid black'
      body.appendChild(ele)
    }
    console.log(`总耗时:${new Date() - start} 毫秒`)
  })
</script>
</body>
</html>

② ele.innerHTML 耗时实验代码:

html 复制代码
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>页面添加元素</title>
</head>
<body>
<script>
  window.addEventListener('load', () => {

    let ele = []
    let body = document.body
    let start = new Date()

    for (let i = 0; i < 10000; i++) {
      ele.push('<div style="width:10px; height:1px; border:1px solid black;"></div>')
    }
    body.innerHTML = ele.join('')
    console.log(`总耗时:${new Date() - start} 毫秒`)
  })
</script>
</body>
</html>

(3) 上面两段代码, 我分别执行了 5 次:

innerHTML 平均耗时为 18.6 毫秒

createElement 平均耗时为 56 毫秒

结论就是, 当添加很多元素时, 首选 数组 + innerHTML 的方式

相关推荐
默_笙2 小时前
🍕 AI 的嘴巴装了水管(上):从"等它说完"到"边说边听"的流式输出指南
前端·javascript
暖焰核心2 小时前
继承全解——继承、默认成员函数、切片、隐藏与虚继承
java·前端·javascript
艾伦野鸽ggg2 小时前
前端异步请求的状态竞争(请求竞态)问题
前端·javascript·axios
是立不是利3 小时前
前端交互基石:深入剖析JavaScript三级联动背后的设计哲学
开发语言·前端·javascript
老刘的望远镜3 小时前
AgentScope Java 从零(03):Agent 的记性默认全开,我在第 50 轮翻了车
java·开发语言·javascript
前端精髓3 小时前
React 更新 state 中的对象
javascript·react.js·ecmascript
可乐鸡翅yeah_4 小时前
hls.js 播放质量埋点实战,采集卡顿、起播、错误指标定位线上用户问题
开发语言·前端·javascript·ecmascript·音视频·m3u8·音视频在线播放
Bs_MoneyMagnet6 小时前
基于springboot+vue的宠物殡葬管理平台的设计与实现 源码+文档
java·javascript·vue.js·spring boot·后端·宠物
尾善爱看海7 小时前
Vue 面试进阶篇:Composition API、插槽、自定义指令……8 个章节 + 高频面试题全解析
前端·javascript·vue.js·面试·vue
三小河8 小时前
在 Codex 桌面端接入 DeepSeek 模型(CC Switch 代理中转)
前端·javascript·人工智能