同一元素上绑定多个相同类型事件,两个监听器的触发顺序如何保证?
围绕“同一元素上绑定多个相同类型事件,两个监听器的触发顺序如何保证”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明按添加顺序触发,且捕获/冒泡阶段不同层级才有抢跑;不能依赖顺序时如何用 once/特定选项。
浏览器面试题第 6 页,显示第 251–300 题,共找到 301 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
围绕“同一元素上绑定多个相同类型事件,两个监听器的触发顺序如何保证”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明按添加顺序触发,且捕获/冒泡阶段不同层级才有抢跑;不能依赖顺序时如何用 once/特定选项。
围绕“scroll 事件本身不冒泡,如何在不给每个滚动容器绑定监听器的情况下统一管理”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明可以通过捕获阶段监听 document 或 window,以及如何使用 scroll event 的 capture。
围绕“scroll 事件触发非常频繁,如何有效地控制处理频率?请对比 rAF、timeout 和 passive 的配合”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须比较 rAF 与防抖节流在滚动中的差异,以及 passive 保证不被阻塞。
围绕“scrollend 事件与 scroll 事件有何不同?在处理“停止滚动后执行操作”时如何利用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 scrollend 在所有滚动手势结束后触发,而 scroll 持续触发。
本题对比 stopPropagation() 与 stopImmediatePropagation():前者允许同元素其他监听器执行完再停止传播,后者立即终止同元素剩余监听器并停止传播,文中给出模拟分发代码、适用场景与失效边界。
围绕“如何手动创建并派发一个冒泡的 ClickEvent?有哪些属性需要设置”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 new Event('click', {bubbles:true})、派发目标及构造函数中可设置的 cancelable。
本文用父子列表事件说明 event.target 与 event.currentTarget 的本质区别,解释事件委托中为何用 target 判断来源,并提醒 currentTarget 在异步回调中失效的边界。阅读后可避免常见误判,正确编写委托代码。
围绕“CSS 属性 touch-action 如何影响 touch 事件的默认行为?与使用 preventDefault ”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 touch-action 可在手势开始前声明禁止滚动/缩放手势,防止延迟,而 JS preventDefault 只能之后取消。
围绕“TouchEvent 中 touches、targetTouches、changedTouches 三个列表的区别是”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明各自含义:当前所有触点、目标元素上的、发生变化的;在 touchend 中只能用 changedTouches 获取消失的点。
围绕“什么情况下会触发 touchcancel?在实现自定义滑动手势时为何要处理它”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须列举系统中断、来电、浏览器接管滚动等,并强调清除手势状态。
围绕“appendChild 和 insertBefore 在插入节点时的行为有何不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明前者总是末尾插入,后者需指定参考节点,以及返回值和边界(null 参数)。
围绕“slot.assignedNodes() 和 assignedElements() 的区别在何处”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明过滤非元素节点,以及是否包含 fallback 内容。
围绕“为什么自定义元素需要 attachShadow,而普通 Div 也能附加 Shadow Root”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需揭示 Shadow DOM 的封装功能,以及是否需要 open/closed 模式,不谈及样式隔离细节。
围绕“Attr 接口在 DOM 中代表什么?为什么不是所有属性都能当作节点”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明属性类型、命名空间、与元素属性的区别。
围绕“childNode.replaceWith 和 parentNode.replaceChild 有什么不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需强调调用对象和参数不同,以及兼容性。
围绕“compareDocumentPosition 可以返回哪些标志位?常用在哪里”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需列出常量如 DOCUMENT_POSITION_PRECEDING 等,用途如排序,不分析算法。
围绕“事件对象中 composedPath() 与 path 属性有什么不同?与 Shadow DOM 有何关系”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需回答 composedPath 是标准且穿过 Shadow DOM 边界、path 是旧的不保证。
围绕“createTextNode 的使用场景与直接设置 textContent 有何不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需侧重创建独立节点插入 vs 直接替换全部子文本,以及能否再追加。
对比 createElement 与 cloneNode 在创建节点时的机制差异:前者新建空元素,后者复制节点及可选子树;强调属性保留但事件丢失,并给出实际场景与边界。
围绕“自定义元素生命周期中 connectedCallback 和 disconnectedCallback 分别在什么时”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需区分插入到文档或删除时,以及为什么不可信时不执行。
围绕“document.documentElement 和 document.body 分别指向什么节点”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需回答一个指向根元素 <html>,另一个指向 <body>,以及在严格文档和动态创建中的差异。
围绕“document.visibilityState 与 document.readyState 分别反映文档什么状态”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需回答浏览器可见性(页面隐藏)与加载阶段,用于不同场景。
围绕“DocumentFragment 是用来解决什么问题的”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明它作为轻量级容器避免多次重排和性能问题,但不适于实际插入。
本题对比 DOM 中 firstChild 与 firstElementChild 的差异,强调 childNodes 与 children 的关系、空白节点的影响及返回值判定,给出具体场景与边界。
围绕“通过 getAttribute 读取 HTML 属性与直接访问元素属性(如 id)有何本质区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需区分属性字符串与属性值类型(如 value 和 checked),以及同步性。
围绕“HTMLCollection 的 namedItem 方法在什么时候有用?它如何处理重名的项”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需回答可用于表单等带 name 属性元素。会返回第一个匹配或 null。
围绕“importNode 和 adoptNode 在跨文档复制节点时有何区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需回答导入返回新副本而采纳移动原节点,也讨论可选 deep 参数,但不涉及安全性。
解析 innerHTML 与 outerHTML 对 DOM 的影响范围:innerHTML 只操作内容,不涉及自身;outerHTML 操作元素整体,赋值时替换节点。涵盖读取差异、赋值行为、无父节点情况以及引用保留。
围绕“insertAdjacentHTML 与设置 innerHTML 在插入内容上有什么关键差异”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需回答插入位点控制、不影响目标元素内部的现有节点与是否重新解析。
围绕“isSameNode 和 isEqualNode 在比较节点时有什么不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需区分比引用同一对象与比内容结构是否相等(含属性、文本、子节点)。
围绕“MutationObserver 回调中 MutationRecord 的 target、addedNodes 和 ”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明每个变更记录的含义和对应属性值。
围绕“在 observe 时 childList、attributes 和 characterData 这三个选项分别监控”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需准确列出分别跟踪子节点增删、属性变化和文本数据变化,不引入其他 option。
围绕“MutationObserver.takeRecords 的用途和时机是什么?它和回调有什么关联”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需回答在回调尚未执行前清空队列并返回记录,适合手动处理同步记录。
本题详解 NodeList 与 HTMLCollection 的区别:包含节点范围(元素 vs 所有节点)、动态与静态性、可用的数组方法。通过具体示例展示 childNodes 和 children 的差异,以及 querySelectorAll 的静态特征。帮助开发者选择正确的 API 遍历节点。
围绕“normalize 方法的作用是什么?它会在什么情况下拆分文本节点”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需回答消除空文本和合并相邻文本节点,也可能创建文本节点?但主要是清理。
围绕“自定义元素必须定义 observedAttributes 才能收到 attributeChangedCallback”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明缺省时不会调用,以及数组内属性变化才触发,但不讨论列表之外的 setAttribute。
本文对比 Element.children 与 Node.childNodes:前者仅枚举元素子节点,后者包含所有子节点类型。解释 live 集合行为及遍历时的坑,帮助选择正确的遍历方式。
本文对比 querySelector 和 getElementById 的机制差异:参数类型、返回结果、错误处理、缓存行为。通过具体场景说明如何选择,并指出重复 ID、特殊字符、动态更新等边界条件。
围绕“缺少 <!DOCTYPE html> 会影响 DOM 树的哪些行为”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需回答文档是否标准模式、某些属性的表现(如 aspect ratio),不解释 CSS 布局。
围绕“range.cloneRange 和 range.cloneContents 的区别是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需区分复制范围边界与复制范围包含的内容 Fragment。
围绕“Range.extractContents 和 deleteContents 有什么不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需回答是否返回被删除的节点,以及是否重新组织文档结构。
围绕“Range.getBoundingClientRect 和常用的 element.getBoundingClient”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需回答针对范围内容折行时返回矩形集合,而不是节点的单一框。
围绕“Range.intersectsNode 方法判断什么?在什么场景下使用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需回答判断范围是否触碰某节点(部分重叠),并用在选区高亮上,不深入几何。
解释removeChild与Element.remove的调用方和返回值差异,以及在子节点不属于父节点时removeChild抛错而remove无操作;适合DOM操作中选择移除方式的判断。
围绕“使用多个 Range 添加 Selection 时有哪些限制与触发的事件”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明只能有一个活动选区、addRange 合并或替换,selectchange 触发时机。
围绕“Selection 的 removeAllRanges 和 collapse 方法有什么区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明一个清空选区,另一个将折叠到节点某位置。
围绕“Shadow Root 的 mode: 'open' 和 'closed' 分别有什么后果”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确外部访问 shadowRoot 属性与安全问题。
围绕“通过 slot 属性分配到命名插槽时,浏览器如何决定匹配哪个 <slot>”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需回答根据 name 对应 slot 元素,设置默认插槽。
本文剖析 textContent、innerText、innerHTML 在文本获取与 HTML 解析上的差异,包括隐藏元素处理、重排触发和设置行为。
解释 DOM 中 Node 作为抽象基接口与 Element 作为元素节点子接口的继承关系,对比二者在 nodeType、childNodes 与 children、getAttribute 等属性和方法上的差异,并给出判断边界。