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

JavaScript 编程精解 中文第三版 十四、文档对象模型

因为 JavaScript 允许我们构建自己的抽象,可以设计改进方式来表达你正在执行的操作。 许多用于浏览器编程的库都附带这些工具。 沿着树移动 DOM 节点包含了许多指向相邻节点的链接。...尽管图表中每种类型的节点只显示出一条链接,但每个节点都有parentNode属性,指向一个节点,它是这个节点的一部分。...这仅限于最常用的标准属性。 HTML 允许你在节点上设定任何属性。这一特性非常有用,因为这样你就可以在文档中存储额外信息。你自己创建的属性不会出现在元素节点的属性中。...这是隐藏元素的一种方式。更好的方式是将其从文档中完全移除,因为稍后将其放回去是一件很简单的事情。 JavaScript 代码可以通过元素的style属性操作元素的样式。...属性style中的样式会直接作用于节点,而且往往拥有最高优先级。 我们可以在 CSS 规则中使用标签名来定位标签。规则.abc指的是所有class属性中包含abc的元素。

1.4K20

浏览器加载解析渲染机制的全面解析

这里的阻塞js,是指阻塞其加载,还是阻塞其执行呢?稍后我们具体分析一下。 Webkit使用Flex和Bison解析生成器从CSS语法文件中自动生成解析器。...它们都是将每个css文件解析为样式表对象,每个对象包含css规则,css规则对象包含选择器和声明对象,以及其他一些符合css语法的对象。 ?...开发者可以将脚本标识为defer,以使其不阻塞文档解析,并在文档解析结束后执行。Html5增加了标记脚本为异步的选项,以使脚本的解析执行使用另一个线程。...每个渲染对象用一个和该节点的css盒模型相对应的矩形区域来表示,正如css2所描述的那样,它包含诸如宽、高和位置之类的几何信息。盒模型的类型受该节点相关的display样式属性的影响。...另一个多个渲染对象的例子是不规范的html,根据css规范,一个行内元素只能仅包含行内元素或仅包含块状元素,在存在混合内容时,将会创建匿名的块状渲染对象包裹住行内元素。

1.2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    浏览器原理

    接收 HTML 标记后转为“before html”模式,并在这个模式下重新处理此标记。这样会创建一个 HTMLHtmlElement 元素,并将其附加到 Document 根对象上。...解析器遇到 script标记时立即解析并执行脚本。文档的解析将停止,直到脚本执行完毕。 如果脚本是外部的,那么解析过程会停止,直到从网络同步抓取资源完成后再继续。...这就是文档所指向的呈现对象。渲染树的其余部分以 DOM 树节点插入的形式来构建。 3. 布局(重要) 呈现器在创建完成并添加到渲染树时,并不包含位置和大小信息。...因为每个页面元素都有一个独立的渲染进程,包含了主线程和合成线程,主线程负责js的执行、CSS样式计算、计算Layout、将页面元素绘制成位图(Paint)、发送位图给合成线程。...html 遇到有src的scripts(没有async和defer标记)加载外部的js时,同步加载并阻塞解析html,而且加载完马上执行 遇到设置async和defer的script,创建新的线程异步加载

    2K21

    渲染树2.1 CSS样式计算2.2 构建渲染树3. 布局(重要)4. 重绘与重排(重要)5. paint(绘制)6. composite(重要)7. 浏览器加载

    接收 HTML 标记后转为“before html”模式,并在这个模式下重新处理此标记。这样会创建一个 HTMLHtmlElement 元素,并将其附加到 Document 根对象上。...解析器遇到 script标记时立即解析并执行脚本。文档的解析将停止,直到脚本执行完毕。 如果脚本是外部的,那么解析过程会停止,直到从网络同步抓取资源完成后再继续。...这就是文档所指向的呈现对象。渲染树的其余部分以 DOM 树节点插入的形式来构建。 3. 布局(重要) 呈现器在创建完成并添加到渲染树时,并不包含位置和大小信息。...因为每个页面元素都有一个独立的渲染进程,包含了主线程和合成线程,主线程负责js的执行、CSS样式计算、计算Layout、将页面元素绘制成位图(Paint)、发送位图给合成线程。...html 遇到有src的scripts(没有async和defer标记)加载外部的js时,同步加载并阻塞解析html,而且加载完马上执行 遇到设置async和defer的script,创建新的线程异步加载

    5.2K41

    现代浏览器探秘(part3):渲染

    如果HTML文档中存在或之类的内容,则预加载扫描器会检查由HTML解析器生成的标记,并在浏览器进程中向网络线程发送请求。 ?...图2:主线程解析HTML并构建DOM树 JavaScript可以阻止解析 当HTML解析器找到script>标记时,它会暂停解析HTML文档,并且必须加载、解析和执行JavaScript代码。...你可以在浏览器中开发者工具中的computed部分中看到此信息。 ? 图3:主线程解析CSS以添加计算样式 即使你不提供任何CSS,每个DOM节点都具有计算样式。...图9:主线程遍历布局树并生成绘制记录 更新渲染通道的成本很高 在渲染通道中最重要的一件事就是在每个步骤中,前一个操作的结果被用于创建新数据。...总结 在本文中,我们研究了从解析到合成的渲染通道。 在本系列的下一篇文章中,我们将更详细地介绍合成器线程,并了解当用户进行鼠标移动和单击等操作时会发生什么。

    1.4K10

    Vugu:后端要抢前端程序员的饭碗了?

    但是它们不包含 JavaScript,而是包含用于 if、for 和其他类似的 Go 语言表达式。 每个 .vugu 文件都被转换为对应的 .go 文件。...Vugu 项目中有一个开发服务器,可以在页面重新加载时自动执行此操作,或者用 vugugen 命令行工具与 go generate 集成。...代码生成还尝试在需要时提供合理的默认值,以便 .vugu 文件包含尽可能少的样板,同时也然允许进行大量的自定义。 你的项目被编译为 WebAssembly 模块并在浏览器中运行。...在任何你喜欢的地方创建一个新的空文件夹。我们将用名称 testapp 作为示例。你创建的每个文件都将直接放在此文件夹中,不需要子文件夹。 创建 go.mod,它用来指定 Go 模块名称。...Vugu 文件概述 Vugu 文件有三个部分:标记、样式和代码 标记是 HTML 元素,它是文件的显示部分。

    2.7K70

    HTMLCSSJS 是如何在浏览器中,渲染成你看到的页面?【图解Chrome】

    #JS 可以阻止解析 当 HTML 解析器遇到 script> 标签的时候,它会暂停解析 HTML 文档,然后对这个 JS 脚本进行加载、解析和执行。...#更新渲染管道的成本很高 渲染管道(Rendering Pipeline)中最重要的任务,就是在每个步骤开始前,根据前一次操作的结果,来创建新的数据。...渲染管道(Rendering Pipeline)中最重要的任务,就是在每个步骤开始前,根据前一次操作的结果,来创建新的数据。...例如,如果布局树中的某些内容发生变动,则需要为文档中受影响的部分,重新生成“绘制记录”。 [image.png] 为元素设置的动画,浏览器必须在每一帧之间执行这些操作。...为此,你可以将 JavaScript 操作划分成小块,并在每帧上执行 requestAnimationFrame() ,还可以在 Web Workers 中运行 JavaScript,以避免阻塞主线程。

    4.9K50

    ​什么是 JavaScript?

    JavaScript 是一种动态脚本语言,用于动态创建和控制页面内容(包含结构化的内容及其样式),它可以响应用户输入并做出及时反馈。 如何理解“结构化”? 所谓结构化,就是一层一层的包含关系。...从 Web,到手机 App,再到 PC(Personal Computer)桌面软件,CSS+HTML+JS 三剑客畅通无阻,一切可以用前端技术实现的界面,终将全部被大前端技术所覆盖。...JS 在 Web 页面上几乎能干一切事,举例: 在当前页面的变量中存储一些值; 在内存中操作一些文本,例如将“作者”与“LIYI”拼接起来,形成“作者:LIYI”; 在页面上画出一个圆; 响应某个按钮的单击事件...,调用 alert 接口弹出一个提示; 向服务器端的某个接口发出网络请求,发送一些数据,拉取一些数据,并在页面上更新一些数据; 其它更多操作。...回流:当 js 加载完成后,会在页面的 HTML 和 CSS 全面准备好以后执行,如果 js 在 onload 事件中改变了某页面元素的大小,或者刚才没有加载完成的网络图片现在加载好了,则会触发页面回流

    33320

    React 与 Preact PWA 性能分析报告

    HTML流 使用 renderToString()的缺点之一是它是异步的,这会成为React项目中服务端渲染的性能瓶颈。服务器直到全部HTML被创建后才会发送 请求。...将要加载的模块则获取了服务端返回的html和其他包含state的内容,或者正在使用已经加载的Javascript。 内联对应路径CSS CSS样式表会阻塞页面的渲染。...在Treebo的案例中,转换成Preact让他们的第三方包大小直接从140kb降到100kb。当然,全都是gzip之后的。这让Treebo成功的在目标移动设备将初始交互时间从4.6s降低到3.9s。...考虑如何更好的打包你的第三方库,这样路由只会加载页面所需要的库 Treebo使用webpack-bundle-analyzer来跟踪他们包的大小变化,并在每个路由块中监视其中包含的模块。...在webpack-bundle-analyzer分析的结果中,他们发现“react-router”中包含的“history”模块中包含了“query-string”模块。 ?

    2.2K20

    浏览器渲染页面与DOM相关常见的面试题以及问题

    4.layout: 有了Render Tree,浏览器已经能知道网页中有哪些节点、各个节点的CSS定义以及他们的从属关系,从而去计算出每个节点在屏幕中的位置。   ...对于动态创建的link标签不会阻塞其后动态创建的script的加载与执行,不管script标签是否具有async属性。 中的文档模型,以节点树的形式来表现文档,每个节点代表文档的构成部分(例如:页面元素、字符串或注释等等)。...DOM的作用 DOM 将HTML文档呈现为带有元素、属性和文本的树结构(节点树)。 它允许运行在浏览器中的代码访问文件中的节点并与之交互。节点可以被创建,移动或修改。...事件监听器可以被添加到节点上并在给定事件发生时触发。 什么是DOM渲染? DOM渲染指的是对于浏览器中展现给用户的DOM文档的生成的过程。 DOM树的构建是文档加载完成开始的?

    1.2K30

    HTML5学习笔记

    DOCTYPE html> 2、html5定义了8个新的块级元素,要让旧版本的浏览器正确显示这些元素,可以设置 CSS 的 display 属性值为 block; header, section, footer...header: 标签定义文档的页眉; section:定义文档中的节; footer:定义文档或节的页脚; aside:定义其所处内容之外的内容;//可用作文章的侧栏; nav:定义导航链接的部分;//...果文档中有“前后”按钮,则应该把它放到 元素中; main:规定文档的主要内容;//在一个文档中,不能出现一个以上的 元素。...4、HTML5新元素 包含:图形的绘制,多媒体内容,更好的页面结构,更好的形式 处理,和几个api拖放元素,定位,包括网页 应用程序缓存,存储,网络工作者... 4.1、Canvas ?...,或重置当前路径 ctx.arc(100,25,20,0,2*Math.PI,false);//创建弧/曲线(用于创建圆形或部分圆)。

    1.5K30

    如何使用Vue.js和Axios来显示API中的数据

    在包含Vue的script>标签下面,添加这个代码,它将创建一个新的Vue应用程序并定义一个我们将在页面上显示的数据结构: 的index.html ......现在让我们将应用程序代码分成两个单独的文件, index.html和vueApp.js 。 index.html文件将处理标记部分,JavaScript文件将包含应用程序逻辑。...然后在与index.html文件相同的目录中创建vueApp.js文件。...此代码使用v-for指令,它的作用类似于for-loop。 它遍历数据模型中的所有键 - 值对并显示每个数据的数据。...当API成功返回数据时,将执行该块内的代码,并将数据保存到我们的results变量中。 保存文件并在Web浏览器中重新加载index.html页面。 这次您会看到加密货币的当前价格。

    8.8K20

    高性能的JavaScript--加载和执行

    不论实际的JavaScript代码是内联的还是包含在一个不相干的外部文件中页面下载和解析过程必须停下,等待脚本完成这些处理,然后才能继续,也是页面生命周期必不可少的部分,因为脚本可能在运行过程中修改页面内容...脚本位置  HTML 4 文档指出,一个script>标签可以放在 HTML文档的 或者标签中,可以在其中多次出现。...传统上,script> 标签用于加载外部JavaScript 文件。部分除此类代码外,还包含 标签用于加载外部css文件和其他页面中间件。...每个〈script〉标签阻塞了页面解析过程,直到完整的下载并运行了外部JavaScript代码之后,页面才能继续进行。在浏览器没有遇到〈body〉标签之前,不会渲染页面的任何部分。...如果收到一个有效的响应,那么就创建一个新的script>元素,将它的文本属性设置为从服务器接受到的resposeText字符串。这样做实际上会创建一个带有内联代码的script>元素。

    77720

    浏览器渲染原理及流程

    新的HTML5规范规定了一个完整(虽然轻量级)的浏览器中的数据库 web database 注意:chrome浏览器与其他浏览器不同,chrome使用多个渲染引擎实例,每个Tab页一个,即每个Tab都是一个独立进程...DOM树的生成过程中可能会被CSS和JS的加载执行阻塞,具体可以参见下一章。...当HTML文档解析过程完毕后,浏览器继续进行标记为deferred模式的脚本加载,然后就是整个解析过程的实际结束触发DOMContentLoaded事件,并在async文档文档执行完之后触发load事件...HTML 显然是必需的,因为包括我们希望显示的文本在内的内容,都在 DOM 中存放,那么可以从 CSS 上想办法。 最容易想到的当然是精简 CSS 并尽快提供它。...在页面中创建一个新的渲染层最好的方式就是使用CSS属性will-change,对于目前还不支持will-change属性、但支持创建渲染层的浏览器,可以通过3D transform属性来强制浏览器创建一个新的渲染层

    4.6K32

    【ASP.NET Core 基础知识】--MVC框架--Views和Razor语法

    按Controller组织Views: Views文件夹中通常包含与Controller对应的文件夹,每个Controller文件夹中包含该Controller相关的视图文件。...部分视图 部分视图(Partial View)是在ASP.NET Core中可重用的、可以被其他视图或部分视图包含的组件。...以下是如何创建和使用部分视图的基本步骤: 创建部分视图 在Views文件夹中创建一个名为Shared的文件夹: /Views /Shared 在Shared文件夹中创建部分视图文件,例如...部分视图通常用于渲染重复的 UI 元素,例如导航栏、页脚、模态框等。 在部分视图中,可以包含 HTML、Razor 代码和 C# 代码,类似于完整的视图。...或 Html.Partial 来包含部分视图,然后在部分视图中定义表单。

    54320

    Vue.js知识点整理

    +=i; this.n的网页组成:3部分HTML:提供网页的内容CSS:为内容提供样式JS:为内容提供行为/数据问题: HTML和CSS功能太弱,不包含程序必要的要素...无需编写js,就可以在html上执行部分程序的操作。所以,可简化js程序的编写,避免大量重复编码 Model:模型,指程序中创建的或从服务端获取的数据,一般用JS中的一个对象来保存。...创建一个唯一完整的支持vue的html页面 引入vue-router.js组件,并在中用为之后的页面组件预留空间 引入其它页面组件 引入其它公用的资源css或js...问题:如果希望一个VUE组件加载完成时,也能自动执行一个操作,应该怎么写?1. 什么是: 一个组件从创建,到加载完成的整个过程。2....上销毁之前调用 destroyed(){ } • 组件被从DOM上销毁之后调用 如果路由跳转时,并未更换页面组件,而是在同一个页面组件中,仅更换部分值,则不会重复执行创建和挂载阶段的。

    39410

    【Html.js——功能实现】分享点滴(蓝桥杯真题-18555)【合集】

    /js/index.js">script> script> // 以下是JavaScript代码部分 script> html> 这部分代码定义了页面的主体内容...,包括一个文章部分(article),其中包含标题、子标题和一些文本内容,以及一个操作区域(div.operates),包含点赞、收藏和分享的 SVG 图标。...,将其添加到文档中,选中其中的文本,然后尝试执行浏览器的复制命令。...${paramStr}`; } } 这个函数遍历参数对象,将每个参数拼接成一个字符串,然后根据 URL 是否已经包含问号,将参数字符串拼接到 URL 的末尾。 三、CSS 部分 1....CSS 解析:浏览器读取 CSS 文件,构建 CSSOM 树,根据 CSS 规则为 DOM 树中的元素添加样式,如设置页面背景颜色、文章样式、操作图标样式和分享对话框样式等。

    10210

    10分钟动手制作一个疫情小区防疫地图

    表示在哪个位置附近添加圆,500表示圆的大小,通过这段代码圆也就可以实现了: ?...只需要把上面添加标注和添加圆的两部分代码组合在一起就可以达到文章开头防疫地图的效果。...,需要先去百度地图官网注册一下,获得你专属的地图密钥(如果不会,可以百度搜索百度地图密钥申请),然后替换我代码中你的密钥部分,目前地图中心坐标为北京天安门,你也可以替换成其他地方的经纬度,做完这两步骤以后...,将上面的代码复制到你电脑记事本中,然后存储为.html格式,用浏览器打开就会看到如下效果: ?...百度地图除了上面我们用到的这两个简单的功能以外,还有很多比较好玩的操作,大家可以自行去探索。 如何获取一个地方的经纬度: http://www.gpsspg.com/maps.htm

    1.7K30

    将 SVG 与媒体查询结合使用

    在 HTML 文档中,我们可以根据视口的条件显示、隐藏或重新排列页面的某些部分。例如,如果浏览器窗口的宽度为 480 像素,我们可能会将导航从水平导航移动到垂直可折叠列表。...如果您想对 SVG 图像使用链接 CSS,则需要执行以下两项操作之一: 使用SVG 文档中的元素将 CSS 内联放置 使用or元素(见下面的注释) 注意:Craig..." /> HTML 文档中的 SVG 元素也成为 HTML 文档树的一部分。...SVG 缺乏定位方案 当 CSS 与 HTML 一起使用时,元素框可以: 存在于正常流程中 与float属性一起从正常流程中删除 与position属性一起从正常流程中删除 CSS 规范将这些称为定位方案...我们将在下一节中了解如何执行此操作。 动画和转换 SVG CSS 属性 当我们将过渡和动画添加到混合中时,将 CSS 与 SVG 结合使用会变得更加有趣。

    6.2K00
    领券