零基础快速入门前端DOM核心知识点详解与蓝桥杯Web赛道备考指南(可用于备赛蓝桥杯Web应用开发)
DOM文档对象模型是 HTML/XML 文档的编程接口通过它可动态操作网页内容、结构与样式。本文将结合示例代码系统讲解 DOM 核心知识点重点补充事件系统全解并针对蓝桥杯 Web 应用开发赛道给出针对性备考建议。一、DOM 核心知识点详解1. DOM 元素获取获取 DOM 元素是所有操作的基础常用方法如下querySelector(selector)返回第一个匹配 CSS 选择器的元素支持所有 CSS 选择器语法。querySelectorAll(selector)返回所有匹配元素的NodeList 类数组可通过 for 循环遍历。代码示例// 获取单个class为text的输入框 var text document.querySelector(.text); // 获取所有class为item的日期元素 var items document.querySelectorAll(.item);2. 事件系统全解蓝桥杯核心高频考点事件是 DOM 交互的核心网页的所有用户交互都基于事件机制实现也是蓝桥杯 Web 赛道每年必考的核心内容占比超 40%。下面从基础原理到实战应用结合示例代码完整讲解。2.1 事件的核心三要素任何一个 DOM 事件都由三个核心部分组成缺一不可事件源触发事件的 DOM 元素比如示例中的输入框、日期 div、可点击的 div事件类型触发的动作类别比如输入、点击、鼠标移入、失焦事件处理函数事件触发后要执行的代码逻辑结合示例代码解析// 事件源class为text的input输入框 var text document.querySelector(.text); // 事件类型input输入事件 // 事件处理函数function内的逻辑 text.oninput function(){ console.log(this.value); // 输入时实时打印输入内容 }2.2 事件绑定的三种方式含蓝桥杯考点对比蓝桥杯常考三种绑定方式的区别、适用场景与坑点下面结合示例代码逐一讲解1HTML 行内绑定内联事件直接在 HTML 标签的属性中绑定事件格式为on事件名执行代码/函数调用原文第三个代码块使用了该方式!-- 事件源div事件类型click处理函数div1Click()调用 -- div iddd classdiv1 onclickdiv1Click()ggx jiayou/div script function div1Click(){ console.log(div1被点击了); } /script特点HTML 与 JS 强耦合不推荐工程化使用但蓝桥杯简单题目中会出现核心坑点行内绑定的函数必须是全局函数且this默认指向window而非事件源元素蓝桥杯考法改错题型中常考「行内绑定调用的函数未定义」「this 指向错误」的问题2DOM0 级事件绑定示例代码核心使用方式通过DOM元素.on事件名 处理函数的方式绑定原文中所有的oninput/onclick/onmouseenter均为该方式// 给所有日期item绑定点击事件 for(var i0;iitems.length;i){ var item items[i]; item.onclick function(){ // 点击后的高亮切换逻辑 } }核心特点同一个元素的同一个事件类型只能绑定一个处理函数后绑定的会完全覆盖之前的this指向触发事件的元素本身和行内绑定有本质区别仅支持事件冒泡阶段触发不支持捕获阶段解绑方式元素.on事件名 null蓝桥杯考法tab 切换、高亮选中、表单输入处理等核心题型的标准写法必须熟练掌握3DOM2 级事件绑定蓝桥杯进阶高频考点通过addEventListener()方法绑定是工业级开发的标准方式也是蓝桥杯难题的核心考点// 语法元素.addEventListener(事件类型, 处理函数, 捕获/冒泡配置) text.addEventListener(input, function(e){ console.log(输入内容, this.value); }, false);核心特点同一个元素的同一个事件类型可以绑定多个不同的处理函数按绑定顺序依次执行第三个参数可控制触发阶段false默认冒泡阶段/true捕获阶段this指向事件源元素事件对象会作为第一个参数自动传入处理函数解绑方式必须使用removeEventListener()且处理函数必须是同一个函数引用匿名函数无法解绑蓝桥杯考法事件委托、事件流控制、多事件绑定的复杂交互题必考该方法2.3 事件对象 Event蓝桥杯必考核心事件触发时浏览器会自动创建一个Event事件对象包含了该事件的所有详细信息比如触发的元素、鼠标位置、键盘按键等并自动传入事件处理函数。1获取方式DOM0 级绑定可通过window.event或处理函数的第一个形参获取DOM2 级绑定通过处理函数的第一个形参获取标准写法item.onclick function(e){ // 兼容所有浏览器的写法 var event e || window.event; console.log(event); }2蓝桥杯高频常用属性 方法事件对象成员核心作用蓝桥杯核心考法event.target触发事件的实际目标元素最内层元素事件委托的核心必考event.currentTarget绑定事件的元素和this指向完全一致区分事件源与绑定元素改错题型常考event.preventDefault()阻止元素的默认行为表单提交阻止页面刷新、a 标签跳转阻止、右键菜单阻止必考event.stopPropagation()阻止事件冒泡 / 捕获的传播弹窗点击关闭、父子元素事件冲突处理高频考点event.key/event.keyCode键盘事件的按键值 / 按键编码回车提交表单、快捷键功能、输入限制表单题常考2.4 事件流机制捕获→目标→冒泡事件流描述了事件在 DOM 树中的传播顺序分为 3 个阶段是理解事件行为的核心也是蓝桥杯的难点考点捕获阶段事件从window对象开始自上而下向目标元素传播目标阶段事件到达实际触发的目标元素冒泡阶段事件从目标元素自下而上向window对象传播核心规则DOM0 级绑定、行内绑定仅能在冒泡阶段触发事件addEventListener的第三个参数为true时在捕获阶段触发false默认在冒泡阶段触发结合示例代码的核心考点 示例中使用的onmouseenter/onmouseleave和onmouseover/onmouseout的核心区别就是是否冒泡mouseenter/mouseleave不冒泡仅在鼠标进入 / 离开绑定元素本身时触发不会因为子元素触发而冒泡完美适配示例中的日期 item 悬浮效果不会出现误触发mouseover/mouseout会冒泡鼠标进入 / 离开绑定元素、子元素都会触发容易出现意外的悬浮效果蓝桥杯改错题型常考这个坑2.5 常用事件类型全解结合示例代码 蓝桥杯考法下面按类别详解示例中用到的、以及蓝桥杯高频考察的事件类型明确触发时机与核心区别1表单事件原文第一部分代码核心蓝桥杯表单验证、实时搜索、输入限制题必考示例中用到了 4 个核心表单事件事件名触发时机核心考点oninput输入框的值发生变化时实时触发每输入 / 删除一个字符就触发实时字数统计、实时搜索、输入内容格式化蓝桥杯最高频表单事件onchange输入框失焦且值和获焦时相比发生了变化才触发表单值校验、下拉框选择处理和oninput的触发时机区别是必考考点onfocus元素获得焦点时触发输入框获焦时的提示文案隐藏、样式高亮onblur元素失去焦点时触发失焦时的表单校验、输入内容格式化示例代码行为解析// 每输入一个字符就会触发实时获取输入值 text.oninputfunction(){ console.log(this.value); } // 只有输入框失焦且内容发生了修改才会触发 text.onchangefunction(){ console.log(changed, this.value); } // 点击输入框光标进入时触发 text.onfocusfunction(){ console.log(get focus); } // 点击输入框外的区域光标离开时触发 text.onblurfunction(){ console.log(lose focus); }2鼠标事件原文第二部分代码核心蓝桥杯点击交互、悬浮效果、拖拽题必考示例中用到了 3 个核心鼠标事件事件名触发时机核心考点onclick鼠标左键按下并松开且在同一个元素上完成时触发按钮点击、tab 切换、高亮选中最基础的高频事件onmouseenter鼠标进入绑定元素本身时触发不冒泡悬浮高亮、悬浮提示适合列表项的悬浮效果无冒泡误触发onmouseleave鼠标离开绑定元素本身时触发不冒泡悬浮效果还原和mouseenter配对使用补充高频鼠标事件onmousedown/onmouseup鼠标按下 / 松开时触发优先级高于click拖拽题必考ondblclick鼠标双击时触发3键盘事件蓝桥杯高频考点常用于搜索框回车提交、快捷键、输入限制核心事件onkeydown键盘按键按下时触发按住会连续触发onkeyup键盘按键松开时触发能获取到输入完成后的最终值蓝桥杯考法回车提交表单、数字输入限制、ESC 关闭弹窗4页面 / 窗口事件蓝桥杯坑点考点window.onload页面所有资源HTML、CSS、JS、图片全部加载完成后触发DOMContentLoadedDOM 树解析完成后触发早于onload蓝桥杯坑点JS 代码写在head中时DOM 还未解析获取元素会返回null必须用这两个事件包裹代码2.6 事件委托事件代理- 蓝桥杯超高频必考事件委托是利用事件冒泡的特性把多个子元素的事件绑定统一交给父元素处理是蓝桥杯列表交互题的最优解也是必考点。1核心优势性能提升无需循环给每个子元素绑定事件减少内存占用动态元素兼容后续新增的子元素自动拥有事件效果无需重新绑定代码更简洁避免循环绑定的冗余代码2结合示例代码的实现原日期选择代码中通过 for 循环给 7 个 item 分别绑定了 3 个事件用事件委托优化后只需给父元素.dataDiv绑定一次事件即可// 获取父元素 var dataDiv document.querySelector(.dataDiv); var lastIndex 0; var items document.querySelectorAll(.item); // 点击事件委托给父元素 dataDiv.addEventListener(click, function(e){ var target e.target; // 找到点击的item元素兼容点击子div的情况 var item target.closest(.item); if(!item) return; // 不是item元素不执行 var index item.getAttribute(index); if(lastIndex index) return; // 高亮当前点击的item item.id bg; item.style.color red; item.style.backgroundColor rgb(215,215,214); // 清除上一个选中的样式 items[lastIndex].id ; items[lastIndex].style.color black; items[lastIndex].style.backgroundColor ; lastIndex index; }); // 鼠标移入事件委托mouseenter不冒泡需开启捕获阶段 dataDiv.addEventListener(mouseenter, function(e){ var item e.target.closest(.item); if(!item) return; var index item.getAttribute(index); console.log(mouseenter no.index div); item.style.color red; item.style.backgroundColor rgb(215,215,214); }, true); // 鼠标移出事件委托 dataDiv.addEventListener(mouseleave, function(e){ var item e.target.closest(.item); if(!item) return; var index item.getAttribute(index); console.log(mouseleave no.index div); if(item.id ){ item.style.color black; item.style.backgroundColor ; } }, true);3. DOM 属性操作1自定义属性通过setAttribute()设置、getAttribute()获取自定义属性常用于给元素存储额外数据。代码示例// 给日期元素设置index属性存储下标 item.setAttribute(index, i); // 获取点击元素的index下标 var index this.getAttribute(index);2标准属性直接通过元素对象修改 HTML 标准属性如id、value、className等。代码示例// 切换div1的id属性 div1.id div1.id dd ? dd2 : dd;4. 样式操作1style属性修改单个样式CSS 属性名需转驼峰命名如font-size→fontSize。代码示例div2.style.color red; div2.style.fontSize 25px;2className操作通过修改class属性批量切换样式追加类名时需注意空格分隔。代码示例// 追加类名注意前面的空格避免和原有类名拼接 div2.className div22;3classList推荐更灵活的类名操作是蓝桥杯样式切换的首选方案支持add()添加、remove()移除、contains()判断是否存在、toggle()切换。代码示例div3.classList.add(div33); // 添加类 if (div3.classList.contains(div333)) { // 判断类是否存在 div3.classList.remove(div333); // 移除类 }5. 类数组对象querySelectorAll返回的NodeList是类数组对象可通过for循环遍历但不支持数组的push/filter等原生方法。代码示例// 遍历所有item元素 for (var i 0; i items.length; i) { var item items[i]; // 对每个item执行操作 }二、DOM 核心知识点汇总表基础 DOM 知识点汇总知识点分类具体内容关键描述代码示例元素获取querySelector获取第一个匹配 CSS 选择器的元素document.querySelector(.text)querySelectorAll获取所有匹配元素的 NodeList 类数组document.querySelectorAll(.item)属性操作自定义属性setAttribute()设置、getAttribute()获取自定义属性item.setAttribute(index, i)标准属性直接修改id/value/className等 HTML 标准属性div1.id dd2样式操作style属性修改单个样式CSS 属性需转驼峰命名div2.style.color redclassName覆盖或追加元素的 class 属性div2.className div22classList灵活操作类名支持 add/remove/contains/toggle推荐使用div3.classList.add(div33)类数组对象NodeList 遍历用 for 循环遍历 querySelectorAll 返回的类数组for (var i 0; i items.length; i) { /* 操作 */ }事件系统专项汇总表知识点分类具体内容核心考点与适用场景事件绑定方式HTML 行内绑定HTML 与 JS 耦合仅适用于极简场景蓝桥杯改错题型常考DOM0 级绑定写法简单单事件单处理函数tab 切换、简单点击场景首选DOM2 级绑定支持多处理函数、事件流控制事件委托、复杂交互场景必考事件对象event.target事件委托核心获取实际触发事件的元素必考event.preventDefault()阻止元素默认行为表单提交、a 标签场景必考event.stopPropagation()阻止事件冒泡解决父子元素事件冲突高频考点高频事件类型表单事件input/change/focus/blur表单验证、实时输入处理蓝桥杯表单题必考鼠标事件click/mouseenter/mouseleave点击交互、悬浮效果基础交互题必考键盘事件keydown/keyup回车提交、快捷键、输入限制高频考点进阶机制事件流捕获 / 目标 / 冒泡理解事件传播顺序区分 mouseenter 与 mouseover 的核心事件委托列表交互、动态元素的最优方案蓝桥杯超高频必考三、蓝桥杯 Web 应用开发赛道省赛备考建议1. 核心考点优先级梳理蓝桥杯 Web 省赛的考点有明确的权重分布按优先级排序如下DOM 事件与交互占比 40%事件绑定、事件委托、表单事件、鼠标事件是绝对核心每年省赛至少 3 道题直接考察DOM 样式与属性操作占比 20%classList、style 属性、自定义属性操作是所有交互题的基础本地存储占比 15%localStorage/sessionStorage的读写todolist、数据持久化题必考基础布局与 CSS占比 15%Flex 布局、定位、过渡动画和 DOM 操作结合出题JS 基础语法占比 10%数组方法、循环、条件判断贯穿所有题目2. 真题专项训练策略事件专项突破集中刷「tab 切换」「表单验证」「列表点击高亮」「悬浮交互」四类题型这四类题型 100% 覆盖事件核心考点是省赛必出题。重点掌握事件委托的写法省赛中动态渲染的列表题必须用事件委托才能实现完整功能也是评分的核心得分点。限时模拟训练严格按考试时间4 小时刷整套历年真题提升做题速度与应试心态避免出现 “会做但做不完” 的情况错题复盘整理重点分析错误原因比如「oninput 和 onchange 用混」「事件委托的 target 判断错误」「this 指向混淆」针对性强化薄弱点3. 高频得分技巧与避坑指南表单实时交互需求优先用oninput不要用onchange避免出现 “输入后不触发” 的问题列表元素的事件绑定优先用事件委托不要循环绑定既提升性能也能兼容动态新增的元素样式批量切换优先用classList操作类名不要大量写style属性修改代码更简洁也更容易判分代码写在head中时必须用window.onload或DOMContentLoaded包裹避免出现 “获取不到 DOM 元素” 的低级错误事件处理函数中优先用event.target获取触发元素避免循环绑定中的闭包坑比如示例中循环绑定的 i 值问题
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2455855.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!