DOM操作及相关各种对象之间的关系
Node对象: 以下四个对象都属于(继承自)Node对象。
1 document对象: 代表当前的整个html文档
2 element对象: 代表一个标签元素
3 属性对象: 代表一个标签元素的属性
4 文本对象: 代表一个标签元素的文本
DOM常用及其重要操作总结(由于其中的属性和方法众多, 我们只关注原理和需求):
对元素节点、文本节点、属性节点的增删改查:
元素对象相关操作:
获取元素对象:
document.getElementById(idName) //通过id号来获取元素,返回一个元素对象
document.getElementsByName(name) //通过name属性获取id号,返回元素对象数组
document.getElementsByClassName(className) //通过class来获取元素,返回元素对象数组(ie8以上才有)
document.getElementsByTagName(tagName) //通过标签名获取元素,返回元素对象数组
document.querySelector("#demo"); //querySelector() 方法返回文档中匹配指定 CSS 选择器的一个元素。
document.querySelectorAll("#demo"); //querySelector() 方法返回文档中匹配指定 CSS 选择器的所有元素。
删除元素对象:
const element = document.getElementById("div-02")
element.remove();
增加元素对象:
const element01 = document.createElement("h3") //创建一个html元素,这里以创建h3元素为例
element.appendChild(Node); //往element内部最后面添加一个节点,参数是节点类型
elelment.insertBefore(newNode,existingNode); //在element内部的中在existingNode前面插入newNode
属性对象相关操作:
element.getAttribute(attributeName) //括号传入属性名,返回对应属性的属性值
element.setAttribute(attributeName,attributeValue) //传入属性名及设置的值
element.removeAttribute(name):删除属性方法(不能删除value)
element."屬性名" = "屬性值" ==> 這個方法更加的簡單 ,但是僅限於元素的原有屬性
对特殊属性的额外API(例如css属性,class属性):
设置及其修改css样式(也可以设置为none):
element.style.color = "red";
添加及其删除class属性:
element.classList.add(value);
element.classList.contains(value);
element.classList.remove(value);
element.classList.toggle(value);
文本对象相关操作:
我们做此相关的操作往往针对空元素的,所以直接获取以及设置值就行了, 如果想要删除的话, 直接设置为空;
element.textContent = ""
element.innerHtml = ""
事件相关联的操作:
1 常用事件总结
1.1 鼠标事件
1 2 3 4 5 6 7 8 9 10 |
|
1.2 键盘事件
1 2 3 |
|
1. 哪些元素可以监听键盘事件?
① document
② 可以获取焦点的元素(表单控件,尤其是可输入的元素)
2. keydown 和 keypress 的区别?
① keydown 所有的按键按下都可以触发,无法区分大小写按键。
② keypress 只有可输入字符按键按下才可以触发,可以区分大小写按键。
3. 如何获取按下的是哪个按键?
使用 event 对象中的属性:
evnet.keyCode 获取按键对应的 ascii 值
event.which 同 keyCode
event.key 获取按键的字符值。
1.3 文档事件
1 2 3 |
|
load 事件与 DOMContentLoaded 事件的区别:
① load 事件是页面中所有的一切加载完毕才能触发,包括元素以及外部资源。
② DOMContentLoaded 事件是页面中所有的元素加载完毕就可以触发,不包括外部资源。
1.4 表单事件
1 2 3 4 5 6 |
|
1.5 图片事件
1 2 |
|
1.6 其他事件
1 2 |
|
2 Event 对象
2.1 获取 Event 对象
给事件的回调函数设置第一个形参,就可以获取 event 对象。
不同类型的事件获取的 Event 对象类型也不同。
2.2 鼠标事件对象 MouseEvent 的属性和方法
1 2 3 4 5 |
|
2.3 键盘事件对象 KeyBorardEvent 的属性和方法
1 2 3 |
|
2.4 所有类型的事件对象都有的属性和方法
1 2 3 4 5 |
|
2.5 阻止事件冒泡
在事件的回调函数中执行 event.stopPropagation()
,就可以阻止冒泡。
2.6 浏览器的默认行为
① 浏览器有哪些默认行为
1 2 3 4 |
|
② 阻止浏览器默认行为
在事件的回调函数中调用 event.preventDefault()
即可阻止默认行为。
注意: 如果使用第二种方式监听事件,在回调函数中
return false
同样可以阻止默认行为。
3 事件委托
事件监听到祖先元素上,判断目标元素,如果目标元素满足条件,就执行相关操作。
事件委托的优势:
-
对于给大量的元素监听相同的事件,使用事件委托比遍历挨个监听效率更好。
-
利用事件委托可以让新增的元素也可以响应事件。