DOM结点和事件
整个文档是文档节点
每个 HTML 元素是元素节点
HTML 元素内的文本是文本节点
每个 HTML 属性是属性节点
所有注释是注释节点

有了 HTML DOM,节点树中的所有节点都能通过 JavaScript 访问。
能够创建新节点,还可以修改和删除所有节点。
获取浏览器的地址栏其实有两种方法:
Window 对象、Screen 对象、location 对象、history对象...还有
| 元素类型 | 节点类型 |
|---|---|
| 元素element | 1 |
| 属性attr | 2 |
| 文本text | 3 |
| 注释 comments | 8 |
| 文档document | 9 |
基本属性:根据结点的类型,其值也不一样
#text#documentnodeType 属性返回节点的类型。nodeType 是只读的但其实以上的属性都是不太实用的,如果我们需要获取结点的值,推荐用
待整理:
区别:
设置元素样式:元素.style.样式名=样式值
读取元素样式:——读取到的样式只是值读的不能修改,如果先要修改必须通过Style
(1)元素名.style.display首次获取元素(如果不通过相同的元素名.style.display方法访问赋值那么其值就是'')因为元素名.style.display主要是用来设置样式的
(2)推荐:window.getComputedStyle(this.nextElementSibling).display,这个方法获取元素属性没有这种错误
推荐使用该方法读取DOM结点的样式——参数有两个(一个是要获取属性的DOM结点,一个是伪元素可以不理会(默认会传参))
注意事项:
除了通过ID和querySelector查找返回的是一个元素外,其它无论匹配结果有多少元素返回的都是列表,而只有结点对象才能使用对象方法,所以需要遍历
选择器查找不适用于 Internet Explorer 8 及其更早版本。
| 方法 | 描述 |
|---|---|
| document.getElementById(id) | 通过元素 id 来查找元素 |
| document.getElementsByTagName(name) | 通过标签名来查找元素 |
| document.getElementsByClassName(name) | 通过类名来查找元素 |
| document.getElementsByName(name) | 通过 name 属性 |
| document.querySelectorAll("p.intro"); | 通过选择器来查找元素(匹配多个) |
| document.querySelector("p.intro"); | 同上,只是只匹配一个 |

通过 JavaScript,您可以使用以下节点属性在节点之间导航:
注意事项:结点之间导航的时候可以看到有些方法加了Element的描述有些没有,这是子节点和元素节点的区别(元素节点可以理解为标签结点——>推荐使用Element,方便定位,子节点还包含文本、属性和注释等结点)
下面是一些常见的 HTML 事件:
| 事件 | 描述 |
|---|---|
| onchange | HTML 元素已被改变 |
| onclick | 用户点击了 HTML 元素 |
| onmouseover | 用户把鼠标移动到 HTML 元素上 |
| onmouseout | 用户把鼠标移开 HTML 元素 |
| onkeydown | 用户按下键盘按键 |
| onload | 浏览器已经完成页面加载 |
准确的说on是个关键词,on后的才是事件名
行内绑定
<div onclick="cli1()"></div>
通过元素绑定
div_.onclick = function(){
alert('通过元素绑定事件 绑定事件2')
}
div_.addEventListener('click', function () {
alert('通过事件监听绑定事件');
})
本质上是函数定义与具体调用事件的解耦,实现了同一事件可以调用多个函数,同一函数可以被多个事件调用,推荐使用。分为需事件对象属性/方法及不需要两种:
函数不需要传入事件对象属性或方法:
函数需要传入事件对象的属性或方法:
在事件监听下,可以对单个事件绑定多个事件处理函数,按绑定顺序执行。
Tip:不能在函数里进行事件监听【待验证】
/*
给dom元素删除事件监听
el_obj.removerEventListener(1,2);
1: 要删除的事件名
2:相关的事件处理函数(注意:该函数需要时一个外部处理函数)
*/
btn_2.removeEventListener('click', fn);
基本分析:
给元素设置pointer-events:none.然后给伪元素的pointer-events:auto;此时我们把点击元素的事件就取消了 点击伪元素的时候,就可以绑定相应的事件了
第二种是:通过子元素的事件冒泡原理,在子元素事件处理结束后return false,告知父元素事件处理完毕。这样只就屏蔽了父元素接收事件,然后:after伪元素是悬浮在子元素上面的,故点击伪元素的时候触发父元素事件。
var btn = document.querySelector('#txt');
var event = new Event('change');
btn.dispatchEvent(event);
小结: