首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么使用appendChild添加的DOM显示在浏览器上,而不显示在源代码中?

使用appendChild添加的DOM元素会显示在浏览器中,但不会显示在源代码中,这是因为DOM是浏览器解析HTML文档生成的内部表示树,与HTML源代码并不完全相同。以下是对这个问题的详细解释:

  1. DOM与HTML源代码的关系:DOM(文档对象模型)是一个树状结构,表示HTML文档的结构和内容。当浏览器加载HTML文档时,它会解析源代码,并将其转换为DOM树。DOM树由多个节点组成,包括元素节点、文本节点等,它们表示HTML文档中的不同部分。
  2. appendChild方法的作用:appendChild是DOM提供的方法之一,用于向父节点中添加子节点。通过调用appendChild方法,可以将一个DOM元素添加到文档中的指定位置。
  3. 源代码与DOM的差异:虽然DOM树是由源代码生成的,但它并不完全等同于源代码。DOM树是浏览器解析和处理源代码后生成的内部表示,用于方便浏览器操作和渲染。浏览器会根据DOM树来渲染页面,但这个过程并不会反映到源代码中。
  4. 源代码的静态特性:源代码是HTML文档的静态表现形式,是开发者编写和编辑的内容。它在页面加载和渲染时起到了关键作用,但并不会动态变化。因此,通过appendChild方法添加的DOM元素在浏览器中可以正确显示,但在源代码中并不会直接体现出来。

总之,使用appendChild方法添加的DOM元素会在浏览器中显示,但不会直接显示在源代码中。这是因为DOM树是浏览器内部生成的HTML文档表示,与源代码并不完全一致。这种设计使得开发者可以方便地操作和修改DOM,而不需要直接编辑源代码。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用Python手动搭建一个网站服务器,在浏览器中显示你想要展现的内容

前言 在公司网站开发中,我们往往借助于Flask、Django等网站开发框架去提高网站开发效率。那么在面试后端开发工程师的时候,面试官可能就会问到网站开发的底层原理是什么?...我们不止仅仅会使用框架开发,还需要知其所以然 今天领大家不借助任何框架的基础上手动搭建一个资料查找网站 主要内容 TCP网络模型 正则表达式匹配资源 如何编写一个tcp server服务端 开始我们的代码...可以使用Python自带的一个通讯模型:socket python中内置的网络模型库tcp / udp import socket 为浏览器发送数据的函数 1....向浏览器发送http数据 如果浏览器在接收完http协议数据之后遇到了换行,自动将下面的数据转成网站内容body中去 response = 'HTTP/1.1 200 OK \r\n' response...+= '\r\n' # 构建你想要显示的数据内容 response += 'hello world' 3.

2K30
  • 浏览器请求与渲染全过程

    重绘发生在GPU上,以提高效率和性能。 7.合成与显示 最后,GPU合成各个图层,将最终的像素呈现到屏幕上。 为什么操作DOM慢?...增加、删除可见的DOM元素: 当DOM树发生变化,如添加或删除可见元素时,浏览器需要重新计算渲染树中受影响部分的布局,以适应新的DOM结构。这通常会导致回流发生。...每次迭代时,都会创建一个新的li元素和一个文本节点,然后将文本节点添加到li元素中,最后将li元素添加到ul元素中。如果直接放在浏览器上运行,它会产生很多次回流,那有什么办法可以减少回流呢?...(text) ul.appendChild(li); } ul.style.display = "block";//这样就只会产生一次回流 2.借助文档碎片 存放多个子节点而不立即插入到...DOM树中 在文档碎片内部添加、删除或修改节点不会引起回流 所有操作完成后,整个文档碎片可以一次性被添加到DOM树中,这样就只需要一次回流来反映所有变更 let ul = document.getElementById

    24710

    极意 · 代码性能优化之道

    所以再次提醒:所有的质量都是建立在可读性和可维护性之上的,在保证可维护性的基础上建设高质量高性能的代码,才是代码的最佳实践。...避免全局变量 全局变量是在脚本中的任何函数之外声明或定义的变量。 这表明可以从特定脚本中的任何位置访问全局变量,而不仅限于函数或块。...的操作应该是先读取再操作 避免频繁的对 DOM 元素读、写、读、写,要将读和写进行分离 7、批量操作 DOM 再重复描述一遍浏览器的渲染队列机制:当我们修改了元素的几何属性,导致浏览器触发重排或重绘时...DOM 节点的创建和删除带来的性能开销十分大,所以不推荐这种用法。...因此,最好是创建副本(例如,使用 Array.from)后再迭代这个数组以添加、移动或删除 DOM 节点。

    12210

    JavaScript 编程精解 中文第三版 十九、项目:像素艺术编辑器

    在撰写本文时,这还不适用于所有浏览器。 DOM 的构建 界面组件做的主要事情之一是创建 DOM 结构。 我们再也不想直接使用冗长的 DOM 方法,所以这里是elt函数的一个稍微扩展的版本。...dom; } 这个版本与我们在第 16 章中使用的版本之间的主要区别在于,它将属性(property)分配给 DOM 节点,而不是属性(attribute)。...但它确实需要应用状态中的额外字段。 我们将添加done数组来保留图片的以前版本。 维护这个属性需要更复杂的状态更新函数,它将图片添加到数组中。 但我们不希望存储每一个更改,而是一定时间量之后的更改。...为什么这个很困难 浏览器技术是惊人的。 它提供了一组强大的界面积木,排版和操作方法,以及检查和调试应用的工具。 你为浏览器编写的软件可以在几乎所有电脑和手机上运行。 与此同时,浏览器技术是荒谬的。...在开始这个练习之前,确保你有充足的时间和耐心,并且不要因最初的失败而感到气馁。 在大多数浏览器上,当你选择绘图工具并快速在图片上拖动时,你不会得到一条闭合直线。

    3K10

    如何使JavaScript更高效

    因此在 Web 开发中,重排不可避免,要保证脚本跑得飞快,就必须在保证相同整体效果的前提下将重排保持在最低限度。 浏览器可以选择在脚本线程完成后进行重排,显示变化。...在 DOM 中添加新的幸免于难、改变文本节点的值、或者修改各种属性,都足以引起重排。多次连续地改变可能导致多次重排。...因此,总的来说,最好在一段未显示出来的 DOM 树片段上进行多次改变,然后用一个单一的操作把改变应用在文档的 DOM 中。...原因在于,如果另一个文档已经销毁,比如原来显示在弹出窗中而现在这个窗口关闭了,当前文档中保存的引用通常仍然会使其 DOM 树或者脚本环境在 RAM 中存在,哪怕文档本身已经不在加载状态了。...理论上来说,在页面加载完成之后可以通过 SCRIPT 元素来加载额外的脚本并通过 DOM 添加到文档中。当前所有主流浏览器都支持这样做,但是它实际上可能是在浏览器上请求而不是立即加载脚本。

    1.6K10

    前端: 如何渲染十万条数据

    ,但是当我们快速滚动页面的时候,会发现页面出现闪屏或白屏的现象 为什么会出现闪屏现象呢 大多数电脑显示器的刷新频率是60Hz,大概相当于每秒钟重绘60次;大多数电脑显示器的刷新频率是60Hz,大概相当于每秒钟重绘...60次 大多数浏览器都会对重绘操作加以限制,不超过显示器的重绘频率,因为即使超过那个频率用户体验也不会有提升。...它能保证回调函数在屏幕每一次的刷新间隔中只被执行一次,这样就不会引起丢帧现象。...DocumentFragments是DOM节点,但并不是DOM树的一部分,可以认为是存在内存中的,所以将子元素插入到文档片段时不会引起页面回流。...可以将要渲染的节点,添加到碎片节点中,然后再将碎片节点,添加到DOM树中,从而提高性能 。

    2.8K22

    前端性能优化小结

    ) Promise / Web Worker、Time Slicing(延迟执行,队列任务,线程阻塞) DOM操作 一般来说dom操作对页面卡顿影响虽不是最大但肯定是最常见的,习惯使用 jquery 的小伙伴肯定不陌生...所以通常来看 repaint 的代价要远小于 reflow, 速度也更快 在 CSS 中可使用 transform 和 opacity 属性更改来实现动画,这两个属性更改不会触发重排与重绘,它们是可以由合成器...DOM渲染顺序(选择性渲染Layout及Paint)tips:gif图片会持续触发 Paint 能放到 DOM 操作之外的操作就放到外面,DOM 操作要尽量少 DOM 操作优化中这一观点在网上已经很普及了...,很多例子都有比如遍历一个数组然后逐渐把内容添加到 DOM 上,这里就推荐先遍历完数组,然后一次性在 DOM 上操作。...; 大范围操作先把容器隐藏,在其中操作完成后,再显示 这是一个我刚接触前端时遇到的一个优化办法,当时很不理解为什么 display=none 之后操作就算是性能优化了。

    14710

    前端硬核面试专题之 HTML 24 问

    当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等元素也如此,类似于将所指向资源嵌入当前标签内。这也是为什么将 js 脚本放在底部而不是头部。...等造成页面回流; appendChild 等 DOM 元素操作; font 类 style 的修改; background 的修改,注意着字面上可能以为是重绘,但是浏览器确实回流了,经过浏览器厂家的优化...标准模式的排版和 JS 运作模式都是以该浏览器支持的最高标准运行。在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。 ---- HTML5 为什么只需要写 不基于 SGML(标准通用标记语言(以下简称“通用标言”),因此不需要对 DTD 进行引用,但是需要 doctype 来规范浏览器的行为(让浏览器按照它们应该的方式来运行);而 HTML4.01...cookie 数据始终在同源的 http 请求中携带(即使不需要),也会在浏览器和服务器间来回传递。

    1.2K20

    Web 性能优化-页面重绘和回流(重排)

    浏览器是如何渲染一个页面的 浏览器把获取到的 HTML 代码解析成1个 DOM 树,HTML 中的每个 tag 都是 DOM 树中的1个节点,根节点是 document 对象。...DOM 树里包含了所有 HTML 标签,包括 display:none 隐藏的标签,还有用 JS 动态添加的元素等。...重绘与回流 当 render tree 中的一部分(或全部)因为元素的规模尺寸、布局、显示/隐藏等改变而需要重新构建,这个过程称作回流(reflow)。页面第一次加载的时候,至少发生一次回流。...当 render tree 中的一些元素需要更新属性,而这些属性只是影响元素的外观,风格,而不会影响布局的,比如 background-color,这个过程叫做重绘(repaint) 在回流的时候,浏览器会使...// 回流+重绘 浏览器 如果向上述代码中那样,浏览器不停地回流+重绘,很可能性能开销非常大,实际上浏览器会优化这些操作,将所有引起回流和重绘的操作放入一个队列中,等待队列达到一定的数量或者时间间隔,就

    1.2K20

    《JavaScript 模式》读书笔记(8)— DOM和浏览器模式1

    大家好,又见面了,我是你们的朋友全栈君。   在本书的前面章节中,我们主要集中关注于核心JavaScript(ECMAScript),而并没有太多关注在浏览器中使用JavaScript的模式。...考虑到在浏览器中存在很多前后矛盾的主机对象和DOM实现,这种想法也是可以理解的。很明显通过使用一些较好的可以减少客户端脚本负担的实践技巧,可以获益颇多。   ...这也是为什么使用一个好的JavaScript类库(该类库可以抽象出不同浏览器的区别)可以显著加快开发进度。   让我们来看看在访问和修改DOM树时推荐的一些模式(主要是出于性能方面考虑)。...当将文档碎片添加到DOM树时,不是将碎片本身添加到DOM树中,而是将文档碎片的内容添加进DOM树中。该操作是十分方便的。...这是十分方便的,因为当事件在关注的节点之外发生时,回调事件函数实际上并没有被调用。

    91430

    《JavaScript 模式》读书笔记(8)— DOM和浏览器模式1

    在本书的前面章节中,我们主要集中关注于核心JavaScript(ECMAScript),而并没有太多关注在浏览器中使用JavaScript的模式。...考虑到在浏览器中存在很多前后矛盾的主机对象和DOM实现,这种想法也是可以理解的。很明显通过使用一些较好的可以减少客户端脚本负担的实践技巧,可以获益颇多。   ...这也是为什么使用一个好的JavaScript类库(该类库可以抽象出不同浏览器的区别)可以显著加快开发进度。   让我们来看看在访问和修改DOM树时推荐的一些模式(主要是出于性能方面考虑)。...当将文档碎片添加到DOM树时,不是将碎片本身添加到DOM树中,而是将文档碎片的内容添加进DOM树中。该操作是十分方便的。...这是十分方便的,因为当事件在关注的节点之外发生时,回调事件函数实际上并没有被调用。

    86720

    虚拟滚动之原理及其封装

    实际上对于 DOM 的性能测试这么做是不科学的,因为 DOM 的操作会引起浏览器的回流(reflow)。...如果浏览器的 reflow 执行的时间远大于代码执行时间,会造成你时间计算完成之后,浏览器仍然在卡顿。...在笔者的电脑上,创建 10000 个带文本节点就需要 800ms+,笔者实际业务中的列表每个条数据都需要 20个左右的节点。那么,实际单纯渲染10000条数据,理论上最快得17s。 2....,并渲染到页面中4.计算 startIndex 对应的数据在整个列表中的偏移位置 startOffset,并设置到列表上 vList对象基本过程: 初始化(mixin) -> 添加数据(addData)...小结 在虚拟dom成为主流的今日,如果不亲自去调查了解,你发现不了这么一个事实:习惯于从视图层取数据的前端原来还大有人在。 视图层依赖dom,而dom成为一种负担不得控制的时候,你会发现很多人技穷了。

    10K20

    浏览器原理学习笔记05—浏览器中的页面渲染

    ,在《浏览器开发者工具》一章中详解。...前面章节《宏观视角下的浏览器》和《浏览器中的页面渲染》讲过,DOM 树生成后还要经历布局、分层、绘制、合成、渲染等阶段后才能显示出漂亮的页面,而渲染流水线任意一帧的生成方式,有 重排、重绘 和 合成 三种方式...(Web Workers 中没有 DOM、CSSOM 环境) 避免强制同步布局 通过 DOM 接口执行元素添加或删除等操作后,为避免当前任务占用主线程太长时间,一般重新计算样式和布局操作是在另外的任务中异步完成的...Service Worker 在 Web Worker 的基础上增加储存功能,解决了 Web Worker 每次执行完脚本后退出不保存结果而导致的重复执行问题。...将模板添加到影子 DOM 上 shadowDOM.appendChild(content.cloneNode(true)) } }

    1.5K199

    「前端进阶」高性能渲染十万条数据(时间分片)

    前言 在实际工作中,我们很少会遇到一次性需要向页面中插入大量数据的情况,但是为了丰富我们的知识体系,我们有必要了解并清楚当遇到大量数据时,如何才能在不卡主页面的情况下渲染数据,以及其中背后的原理。...因此,当你对着电脑屏幕什么也不做的情况下,大多显示器也会以每秒60次的频率正在不断的更新屏幕上的图像。 为什么你感觉不到这个变化?...而屏幕给你的这种感觉是对的,试想一下,如果刷新频率变成1次/秒,屏幕上的图像就会出现严重的闪烁, 这样就很容易引起眼睛疲劳、酸痛和头晕目眩等症状。...大多数浏览器都会对重绘操作加以限制,不超过显示器的重绘频率,因为即使超过那个频率用户体验也不会有提升。因此,最平滑动画的最佳循环间隔是1000ms/60,约等于16.6ms。...在 setTimeout中对dom进行操作,必须要等到屏幕下次绘制时才能更新到屏幕上,如果两者步调不一致,就可能导致中间某一帧的操作被跨越过去,而直接更新下一帧的元素,从而导致丢帧现象。

    2.5K42

    如何使用谷歌浏览器 Chrome 更好地调试

    Google Chrome 的开发人员工具中有多种功能和工具可供开发人员直接在浏览器中编辑代码、测试和添加断点以检测问题,并更有效地调试代码。...getEventListeners() - 获取事件监听器 使用作为参数传递给它的 DOM 对象调用 getEventListener 函数会返回在该特定对象上注册的所有事件。...Chrome 允许你直接从控制台执行此操作,而无需使用 debug() 函数访问你的源代码。只需在控制台中调用它并将函数的名称传递给它,它就会自动将调试器注入到函数中,让你可以单步调试代码。...你可以通过单击“源”面板中的行号来添加它们。左键单击会自动添加断点,而右键单击数字可以设置条件断点,这对于调试循环非常有用。...执行指针简单地移动到函数的顶部。 在 DOM 元素上添加断点(属性/模板更改) 有时你可能需要在有条件或动态更改的 DOM 元素上放置断点或调试器。

    3.7K30

    使用 shadow DOM

    你所能看到的只是一个 标签,实际上,在它的Shadow DOM中,包含来一系列的按钮和其他控制器。...浏览器中的某些内置元素就是这样的,例如,包含了不可访问的 Shadow DOM。...如果你想将一个Shadow DOM添加到 custom element上,可以在 custom element的构造函数添加如下实现(这往往也是最有用的做法): let shadow = this.attachShadow...它包含一个图片 icon和一段文字,这个图片 icon用于在页面上显示。每当 icon获取到焦点时,文字会在一个弹框中显示,以提供更加详细的信息。...添加到 Shadow root上 最后,将所有创建的元素添加到 Shadow root上: // 将所创建的元素添加到 Shadow DOM上 shadow.appendChild(style); shadow.appendChild

    1.9K90

    一段神奇的监视 DOM 的代码

    通过使用此模块,只需将鼠标悬停在浏览器中,即可快速查看DOM元素的属性。基本上它是一个即时检查器。 ? 将鼠标悬停在 DOM 元素上会显示其属性!...自己尝试一下 复制下面的整个代码块,并将其粘贴到浏览器 Web 控制台中。现在将鼠标悬停在你正在浏览的任何网页上。看到了什么?...从目标元素中检索属性,将其简化为单个字符串,最后在工具提示中显示。...如何解析 DOM 对象的属性 如何找到鼠标 X 和 Y 的位置 如何获取文档的滚动位置 了解不同浏览器的行为方式 —— Edge vs....Safari 开源 你可以在这里【https://github.com/eddieherm/spyon】找到源代码,希望你能做得更好!也许你不希望将其作为 IIFE 来实现,或者是去显示其他数据。

    83210

    【Web技术】264- Web Component可以取代你的前端框架吗?

    这个组件在你的浏览器开发工具中显示为一个单独个HTML标签,并且它的样式和行为都是完全在组件内进行,不需要工作区,框架和一些前置的转换。 让我们来看一些Web Components的一些主要功能。...,例如在已经声明并被解析的文档中,或者使用document.body.appendChild添加。...这意味着你需要根据某些属性的值,在Shadow DOM中配置任何节点,那么你需要在构造函数中引用这些节点,而不是在connectedCallback中引用它们。...同样重要的是,你可以在组件使用customElement.define()之前去使用它。当改元素出现在DOM或者被插入到DOM,而还没有被注册时。它将会是一个HTMLUnkonwElement的实例。...例如你再一个网页中有一个元素,它将会作为一个单独的标签展示,但它也将显示播放和暂停视频的控件,当你在浏览器开发工具中查看video标签,是看不到这些控件。

    2.6K30
    领券