dom
document 文档对象 理解:在js中如何看待 html标签
html
js如何操作html元素? 选择器
- 1.选中html 元素,返回 dom对象
- 2.该元素以对象的方式存在 在class ID。。。HTML属性:将作为dom对象下的属性
- 3 所有的html元素怒 都具有相同的原型链从
HTMLElement-->Element-->Node-->EventTaget-->object-->null
操作html元素的目的是什么呢?
- 通过事件驱动,实现页面动态交互
什么是事件驱动?
浏览器对用户行为,通过事件处理函数进行响应的处理,就是事件驱动 domcument 中默认所有的事件属性,初始化赋值为 null 换句话默认不处理任何事件 对某一个元素中的某一个事件 绑定函数后 表示当用户对该元素怒做出该行为行为时,会有一定的响应。 浏览器向应用户,通过执行事件处理函数中代码。 总结 事件是解决用户对浏览器交互问题 交互是一问一答方式 默认:用户有很多行为,元素不作出任何响应 事件处理函数:用户有行为,元素通过函数做出响应 响应:回答
如何实现动态的交互?
1.在事件处理函数内部:对元素进行CUES操作 2.在事件处理函数内部:对元素进行属性赋值修改操作,以及css样式变更操作 3.在事件处理函数内部,创建元素,新增属性,新增css,变更css 将js新增元素添加到页面上 新增元素 dom对象(appendChilid,replaceChild...)dom字符串(innerHTML开,,)
节点操作
curn
增: html字符串模板:dom.innerHTML +=HTML模板字符串 parentn.appendChild(); parentn.inserChild(); 删除: parentn.removeChild(); 改: replaceChild(new,old)用新的替换旧的 查询 document.getElement....
元素节点
dom对象 可以通过选择器获取 document.querySelectorAll()获取
属性节点
创建 document.createAttribute("name") 获取 dom.getAttribute(属性字符) 获取dom 元素 属性的赋值 修改 dom.setAttribute(属性,newValue)给dom下属性设置或者修改值 如果没有这个属性:就是添加并赋值 相当于创建 dom.setAttribute(新的值没有出现过,newValue) 删除 dom.removeAttribute(属性名) 删除dom下的属性
文本节点
dom.innerHTML=文本内容
关系型节点查找
目标元素查找相关的元素,目标元素就是你操作的元素 父 dom.parentElement dom.parentNode 子集合dom.children 相邻兄弟 上一个previousElementSibling 下一个 nextElementSibling
事件
什么是事件?
事件:表示用户的行为 作用:解决用户与浏览器之间交互问题
事件绑定问题 那些内容可以被绑定?
window document html元素 span。。。。 绑定事件有几种方式 1.直接绑定在html上 1.
问题:不能实现将特别长的js代码都写在html元素内部,导致元素太沉重了 2.将元素上js 代码移动到js中
<div onclick="clickHandle()"></div>
<script>
function clickHandle(){
alert('直接绑定')
}
</script>
问题:加剧了html与js的耦合性,降低代码的管理和维护 3.同dom属性方式绑定,解决高耦合问题
<div id="div"></div>
<script>
function clickHandle(){
alert('直接绑定')
}
div.onclick=clickHandle
</script>
如果用这种方法,进行项目的版本覆盖,导致赋值之前的版本事件处理问题 给一个元素只能绑定一个事件处理函数,绑定多个覆盖问题
4.通过添加事件句柄方式 addEventListener方式 解决同一个元素不能绑定多个事件处理函数问题
<div id="div"></div>
<script>
function clickHandle(){
alert('直接绑定')
}
function click2(){alert('第二个函数')}
div.addEventListener('click',clickHandle)
div.addEventListener('click',click2)
</script>
addEventListener优势 1.可以给同一个元素添加多个事件处理函数 2.在事件流中可以设置默认是冒泡行为还是捕获行为 3.添加事件处理函数可以通过 removeEventListener 移除事件 addEventListener弊端 不兼容低版本ie 5.解决添加事件句柄兼容性问题
<div id="div"></div>
<script>
addEvent(div,'click',function(){
alert('解决兼容性问题')
},true)
function addEvent(dom,eventName,handle,eventStream){
// dom元素下是否有 addEventListener 属性 区分 低版本ie 其他浏览器
if(dom.addEventListener){
dom.addEventListener(eventName,handle,eventStream)
}else{
eventName = "on"+eventName;
dom.attachEvent(eventName,handle,eventStream)
}
}
</script>
6.事件流
冒泡: 以 目标元素为主, 触发所有祖籍元素中处理的相同事件 目标元素--->父元素--->组级元素 捕获: 从组级元素触发到目标元素相同的事件处理,事件处理函数执行:组级元素-->父元素--->目标元素 注意 : 1.事件触发,与事件处理是两个问题 2.事件可以随时触发 事件处理:根据需求处理 3.同一个元素,事件机制,只有一个:要么冒泡要么捕获。 4.冒泡捕获行为与html结构有关,与页面效果无关
7.如何阻止事件冒泡
事件对象.stopPropagation()
事件处理函数的中作用什么?
解决用户需要看到的效果问题
事件对象多用是什么?
事件对象:事件处理函数自动接收 记录触发事件的所有行为 谁 在什么事件 什么位置 发生了什么事件 等信息 event.target 获取谁触发事件 event.type 触发什么事件 event.clientX/clientY 获取在哪里触发事件 event.keyCode 获取是哪一个键 触发事件 ....
dom事件的级别的划分?
0级 dom.on事件 问题:覆盖 1级
2级 addEventListener 问题:兼容性问题 推荐使用
掌握事件知识点 1.从如何处理事件开始 2.事件句柄 3.事件流 事件机制 冒泡捕获 阻止冒泡 4.阻止默认事件