1. 节点
1) 概念:
- 文档是由多层节点构成的树形结构,节点分为几种不同类型
- 文档节点Document是每个文档的根节点,只有一个子元素即<html>元素(元素节点),document对象为HTMLDocument的实例
- DOM中所有节点都继承Node类型
2) DOM中的对象类型:
- Object->EventTarget->Node->Document->HTMLDocument->document
- Object->EventTarget->Node->Element->HTMLElement
3) 节点的属性:
- nodeType、nodeName、nodeValue
- parentNode、childNodes(当前节点的所有子节点,保存着NodeList对象,是类数组对象,实际上是基于DOM结构动态执行查询的结果,因此DOM结构的变化能够自动反映在NodeList对象中)
- nextSibling、previousSibling、firstChild、lastChild
4) 节点的方法:
- appendChild()、insertBefore()、replaceChild()、removeChild()都是操作childNodes属性的
- appendChild(新增的节点):向当前节点的所有子节点childNodes列表中的末尾添加一个节点
- insertBefore(添加的节点,添加的位置):向childNodes列表中的指定位置之前添加指定节点
- replaceChild(添加的节点,指定节点):替换childNodes列表中的指定节点为添加的节点
- removeChild(指定节点):删除childNodes列表中的指定节点
- cloneNode(指定节点,true/false是否深复制):复制指定节点
- importNode(指定节点,true/false是否深复制):跨文档复制指定节点
- normalize():处理文档树中的文本节点,若果找到了空文本及诶单,则删除它;如果找到相邻的文本节点,则将他们合并为一个文本节点
5) 节点类型(nodeType):
- Node.ELEMENT_NODE(1):Element(元素节点)
- Node.ATTRIBUTE_NODE(2);Attr(特性节点)
- Node.TEXT_NODE(3):Text(文本节点)
- Node.CDATA_SECTION_NODE(4)
- Node.ENTITY_REFERENCE_NODE(5)
- Node.ENTITY_NODE(6)
- Node.PROCESSING_INSTRUCTION_NODE(7)
- Node.COMMENT_NODE(8):Comment(注释节点)
- Node.DOCUMENT_NODE(9):Document(文档节点)
- Node.DOCUMENT_TYPE_NODE(10):DocumentType(文档类型节点)
- Node.COCUMENT_FRAGMENT_NODE(11):DocumentFragment(文档标记节点)
- Node.NOTATION_NODE(12)
6) 文档类型document的属性:
- document.documentElement:<html>
- document.body:<body>
- document.doctype:<!DOCTYPE>
- document.URL:文档的完成的URL
- document.domain:文档的域名
- document.referrer:文档的来源页面的URL
- document.title:文档的标题
- document.charset:文档中实际使用的字符集(如UTF-8)
- document.defaultCharset:文档中默认的字符集
7) 查找元素(前3个方法均返回HTMLCollection对象)
- document.getElementById()
- document.getElementsByTagName()
- document.getElementsByName()
- document.impletementation.hasFeature(‘指定名称’,‘指定版本’):检查浏览器是否支持指定名称和版本的功能。同ele.isSupported(‘指定名称’,‘指定版本’):当前节点是否支持指定名称和版本的功能
- document.write(输出的文本字符串):将文本写到浏览器页面(会替换原网页内容)
- document.writeln(输出的文本字符串):将文本写到浏览器页面(会替换原网页内容),会在末尾添加换行(\n)
- document.open():打开网页输出流
- document.close():关闭网页输出流
- 在页面加载期间写入不需要open、close,在页面加载完,调用onload方法写入时需要
- **document.querySelector(css选择符):**返回与该模式匹配的第一个元素,没有返回null
- **document.querySelectorAll(css选择符):**返回所有匹配的元素,为NodeList的实例,不是动态的,可以使用方括号或item(index)获取里面的每个元素
- 元素.matchesSelector(css选择符):如果调用元素与该选择符匹配,返回true,否则返回false
- document.getElementsByClassName(包含一个或多个类名的字符串):返回带有指定类的所有元素的NodeList
8) 元素的属性:
- document.getElementById(‘div1’)获取到的为元素节点,又叫标签
- 元素的属性有:
- id、className(class属性,每次改变的时整个class属性)、dir(语言的方向)等
- classList:(为集合类型,DOMTokenList的实例,可以使用方括号和item(index)获取其中的每个元素,可以使用方法
add(指定字符串):增加
remove(指定字符串):删除
contains(指定字符串):是否存在指定值
toggle(指定字符串):存在指定值就删除,不存在就添加
- 元素的属性的操作方法:
- getAttribute(特性名):获取元素的特性,不区分大小写,可以去到data-xxx的自定义属性及标签的自带属性,打印的元素直接属性中只有标签自带的属性,自定义属性和自带属性会都保存在元素的attributes[data-xxx].nodeValue属性中,也可以在ele.dataset.xxx中找到自定义属性,attributes属性中包含NamedNodeMap对象,也是动态的
- setAttribute(特性名,特性值):设置元素的特性,会替换原有的值
- removeAttribute(特性名):删除指定特性
- 创建元素节点:
- createElement(要创建的元素的标签名如’div’):创建元素节点
- createTextNode(要插入节点中的文本如’aaa’):创建文本节点
先取到文本节点或注释节点,再取该节点的内容(data/nodeValue),和元素节点一样,先取到节点,再取节点内容
9) NodeList(childNodes属性)、HTMLCollection(document.getElement…获取的元素)、NamedNodeMap(attributes属性)
以上类数组中的节点可以通过方括号[]和item(index)来访问,都是动态的(即如果新添加节点会自动更新,不用每次操作的先获取)
10) 动态样式:
加载时不存在,加载完成后(即调用window.onload)动态添加进去的;可以通过创建<link>标或者<script>、<style>,添加href属性,并把标签head.appendChild进去
11) 焦点管理:
- document.activeElement:当前获得了焦点的元素
- document.hasFocus():判断文档是否获得了焦点
- ele.focus():获取焦点
- 获取焦点方式:foucus()、用户输入(通常是tab键)、页面加载
12) 插入标记
- ele.innerHTML:调用元素的所有子节点(不包含自己)
- ele.outerHTML:调用元素的所有子节点(包含自己)
- ele.insertAdjacentHTML(指定位置,指定HTML文本):在指定位置插入指定HTML文本
指定位置为:
beforebegin(作为前一个同辈元素插入)
afterbegin(作为第一个子元素插入)
beforeend(作为最后一个子元素插入).
afterend(作为最后一个同辈元素)- ele.innerText:将调用元素的所有节点的文本拼接成的字符串(不包含自己)
- ele.outerText:将调用元素的所有节点的文本拼接成的字符串(包含自己)
- ele.children:返回元素的所有子节点(不包含空格),为HTMLCollection的实例;和childNodes一样
- ele.contains(指定节点):调用节点是否包含指定节点
- ele.compareDocumentPosition(指定节点):调用节点是否包含指定节点
- ele.contentDocument:元素所在框架的文档对象(document)
13) 滚动
- ele.scrollIntoView():通过滚动浏览器窗口或者某个容器元素,调用元素就可以出现在视口中。
- 给某个元素设置焦点也可以让刘拉力器滚动并显示出获得焦点的元素
14) 命名空间
- 命名空间使用特性xmlns来指定
- XHTML的命名空间是:http://www.w3.org/1999/xhtml
- <html xmlns=‘http://www.w3.org/1999/xhtml’>
- 混合使用两种语言时,命名空间用处就很大了
16) 样式
- 定义样式的方式:
内联样式(使用style特性指定)、<link>、<style>- 访问元素的样式:
- 内联样式:ele.style.xxx
ele.style.cssText:所有样式,设置该属性会重写整个内联样式- 所有样式:window.getComputedStyle(ele,’:after’是否包含伪元素)
- 操作样式表:document.styleSheets[0].cssRules[0].style.xxx
- 样式表
- 样式表中有规则,规则中有样式,样式表和规则都会有多个
- 样式表包含<link>、<style>两种样式
- 获取所有样式表:document.styleSheets,包含<link>、<style>两种样式,可能有多个
- Object->StyleSheet->CSSStyleSheet->document.styleSheets[0]
- Object->CSSRule->CSSStyleRule->document.styleSheets[0].cssRules[0]
- Object->StyleSheetList->document.styleSheets
- Object->CSSRuleList->document.styleSheets[0].cssRules
- document.styleSheets[0].cssRules[0].style.xxx