DOM、BOM、Node、Element 与语义标签是什么关系?
先理解原理和示例,再练习完整口述与追问。
回答要点
文档树与浏览器宿主;元素是节点子类;语义与样式分开;原生交互和可访问性。
原理拆解
DOM 提供文档结构和操作接口,Node 包含元素、文本、注释等节点,Element 是元素节点相关接口。BOM 是对 window、location、history 等浏览器环境能力的常用统称,不是 DOM 树里的一类标签。浏览器提供 DOM,不是 JS 引擎天然自带;Node 和小程序逻辑层能运行 JS,却不自动拥有 document。
语义标签表达内容或交互角色,CSS 决定视觉布局。strong/em 表达重要性与强调,title 表达文档标题,h1 表达正文标题;不能只靠加粗、变斜或 display:block 复制全部语义。
示例与推演
点击动作优先 button,导航优先 a;表单用 label 关联 input。对一个元素读 childNodes 会包含文本节点,而 children 只含元素;把所有节点都当 Element 调 querySelector 可能出错。
易错点
div 设置 role=button 后仍需补键盘、焦点和禁用语义,不等于自动变成原生按钮。样式更改不会改变节点类型。
参考回答可直接练习口述
我区分语言、宿主环境和文档接口:Element 是 Node 的一种,DOM 操作文档,BOM 涉及窗口环境。页面优先使用合适语义和原生交互,再用样式调整外观,避免把视觉等同语义。