DOM 前端高频面试题及详细答案(真实面试版)_第1页
DOM 前端高频面试题及详细答案(真实面试版)_第2页
DOM 前端高频面试题及详细答案(真实面试版)_第3页
DOM 前端高频面试题及详细答案(真实面试版)_第4页
DOM 前端高频面试题及详细答案(真实面试版)_第5页
已阅读5页,还剩1页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DOM前端高频面试题及详细答案(真实面试版)一、DOM基础概念(入门必问)1.什么是DOM?DOM的作用是什么?答案:DOM全称文档对象模型,是浏览器提供的一套操作网页文档的API接口。浏览器会把HTML文档解析成一棵节点树结构,页面中所有的标签、文本、属性,都是树上的一个个节点。它的核心作用是:让JS可以读取、修改网页的结构、样式和内容,实现页面的动态交互,比如修改文字、切换样式、新增删除标签、绑定点击事件等。2.DOM节点的类型有哪些?常用的是哪几种?答案:DOM节点分为多种类型,日常开发最常用的有3种:元素节点:HTML标签本身,比如div、p、span,nodeType为1,是开发中操作最多的节点文本节点:标签内部的文字、空格、换行,nodeType为3属性节点:标签的属性,比如class、id、src,nodeType为2除此之外还有注释节点、文档节点等,基本很少用到。很多新手容易踩坑:获取元素内部内容时,会忽略空白文本节点,导致遍历节点出错。3.说说DOM树的解析流程答案:浏览器加载HTML页面时,会从上到下逐行解析:读取HTML文本,逐行解析标签,生成对应的DOM节点根据标签嵌套关系,构建层级节点树,形成完整DOM树DOM树构建完成后,触发DOMContentLoaded事件后续结合CSSOM样式树,生成渲染树,进行页面绘制关键点:解析HTML时遇到JS脚本会阻塞解析,因为JS可以修改DOM,浏览器需要优先执行JS,避免解析冲突。二、DOM节点获取与操作(实操高频)1.常用的DOM获取元素方法有哪些?各自的区别?答案:日常开发常用5种获取方式,核心区别在于返回值类型和是否实时更新:getElementById():通过id获取,返回单个元素,速度最快,id页面唯一getElementsByClassName():通过类名获取,返回HTMLCollection伪数组,实时动态更新getElementsByTagName():通过标签名获取,返回HTMLCollection伪数组,实时动态更新querySelector():通过CSS选择器获取,返回第一个匹配元素,静态获取querySelectorAll():通过CSS选择器获取,返回NodeList伪数组,静态不更新核心区别:动态集合(HTMLCollection)会跟随页面DOM变化自动更新,静态集合(NodeList)获取后不会随页面修改变化。2.如何新增、删除、替换、克隆DOM节点?答案:1.新增节点createElement()创建空元素节点,appendChild()/append()插入页面;append可以传文本和多个节点,appendChild只能传单个节点。2.删除节点旧方式:父节点.removeChild(子节点);新方式:子节点.remove(),使用更简洁。3.替换节点parent.replaceChild(新节点,旧节点)4.克隆节点cloneNode(),参数为true深克隆(复制节点+所有子节点),false浅克隆(只复制当前节点,不复制子内容),默认false。3.innerHTML、innerText、textContent的区别?答案:innerHTML:读写标签内部的HTML结构+文本,可以解析标签,会造成DOM重绘,有XSS注入风险innerText:只读写纯文本,会识别页面样式,会忽略隐藏文本,读取时受CSS影响,性能较差textContent:只读写纯文本,不受样式影响,能读取隐藏文本,兼容性好、性能最高,纯文本操作优先使用总结:需要解析HTML标签用innerHTML,只操作纯文本优先textContent,尽量不用innerText。三、DOM事件机制(面试核心重点)1.什么是DOM事件流?包含哪三个阶段?答案:DOM事件流是事件在页面中传播的完整过程,分为三个固定阶段,顺序不可逆:捕获阶段:事件从最外层根节点自上而下,逐层向下传播到目标元素目标阶段:事件到达触发事件的当前元素,执行绑定的事件函数冒泡阶段:事件从目标元素自下而上,逐层向上传播到根节点日常开发中,绝大多数事件默认在冒泡阶段触发。2.事件捕获和事件冒泡的区别?如何手动控制?答案:区别:传播方向完全相反,冒泡是从内到外,捕获是从外到内。控制方式:addEventListener第三个参数控制,默认false:false(默认):事件在冒泡阶段触发true:事件在捕获阶段触发3.什么是事件冒泡?如何阻止事件冒泡?答案:事件冒泡是子元素触发事件后,事件会向上传递给所有父元素,导致父元素同名事件被意外触发,是开发中常见的bug来源。阻止冒泡两种方式:event.stopPropagation():标准用法,阻止事件继续向上冒泡,不影响当前元素事件执行event.cancelBubble=true:低版本浏览器兼容写法,现在基本不用4.什么是事件委托?原理、优缺点、使用场景?答案:原理:利用事件冒泡机制,不给每个子元素单独绑定事件,而是将事件绑定在共同父元素,通过事件对象的target判断触发元素,执行对应逻辑。优点:减少事件绑定次数,节省内存,提升性能支持动态新增的元素,无需重新绑定事件缺点:事件会一直冒泡到父级,层级过深会有轻微性能损耗部分无冒泡的事件无法使用(如mouseenter、mouseleave)使用场景:列表、表格、动态渲染的按钮、批量元素点击事件。5.stopPropagation和preventDefault的区别?答案:event.stopPropagation():阻止事件传播,阻断捕获或冒泡流程,不改变元素默认行为event.preventDefault():阻止元素默认行为,不影响事件冒泡传播。比如阻止a标签跳转、阻止表单提交、阻止滚轮滚动简单总结:一个管事件传播,一个管标签默认行为。四、DOM渲染与性能优化(进阶面试题)1.什么是重排(回流)、重绘?两者区别和触发条件?答案:重排(回流):元素的布局、位置、宽高、尺寸发生改变,浏览器需要重新计算页面布局,重新排版,性能消耗极高。触发场景:修改宽高、margin、padding、定位、display、获取offsetTop/offsetWidth等布局属性。重绘:元素样式、颜色、背景改变,但布局尺寸不变,浏览器只重新绘制像素,不重新排版,性能消耗较低。触发场景:修改color、background、box-shadow、opacity等样式。核心关系:重排一定会触发重绘,重绘不会触发重排。2.频繁操作DOM如何优化?(高频实操题)答案:频繁修改DOM会频繁触发重排,导致页面卡顿,日常优化手段:文档碎片优化:创建DocumentFragment,批量拼接节点,最后一次性插入页面,只触发一次重排脱离文档流修改:先将元素设置display:none,修改完成后再恢复显示,中间修改不会触发重排样式合并修改:不逐条修改style样式,统一修改class类名,一次性更新样式缓存DOM节点:避免循环中反复获取DOM元素,提前缓存变量利用节流防抖:对resize、scroll等高频触发的DOM事件做节流防抖3.虚拟DOM的核心思路是什么?为什么能提升性能?答案:虚拟DOM是用JS对象模拟真实DOM结构,用对象的属性描述节点的标签、属性、子元素。核心思路:数据变化时,先生成新的虚拟DOM树,通过diff算法对比新旧虚拟DOM的差异,只把变化的最小节点更新到真实DOM,而非全量刷新页面。性能提升原因:真实DOM操作昂贵,JS对象对比运算极快,通过减少真实DOM操作次数、减少重排重绘,大幅提升页面渲染性能,也是Vue、React的核心渲染原理。五、DOM易错面试题(查漏补缺)1.DOMContentLoaded和load事件的区别?答案:DOMContentLoaded:DOM树构建完成后立即触发,无需等待图片、视频、样式文件等资源加载,触发时机更早,适合执行页面初始化JS逻辑load:页面所有资源(图片、视频、脚本)全部加载完成后触发,时机最晚2.什么是事件冒泡的事件委托失效场景?答案:部分鼠标事件没有冒泡机制,无法使用事件委托,常见的有:mouseenter、mouseleave。对应的mouseover、mouseout有冒泡机制,可以正常使用委托。另外,如果子元素阻止了事件冒泡(stopPropagation),父级

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论