文档对象模型 (DOM) 是HTML和XML文档的编程接口。它提供了对文档的结构化的表述,并定义了一种方式可以使从程序中对该结构进行访问,从而改变文档的结构,样式和内容
DOM 将文档解析为一个由节点和对象(包含属性和方法的对象)组成的结构集合。简言之,它会将web页面和脚本或程序语言连接起来。
说白了DOM就是浏览器为JavaScript提供的一系列接口(通过window.documnet提供的),通过这些接口我们可以操作web页面。 但DOM并不是编程语言,它是文档对象的模型,该模型是独立于编程语言的。
DOM 创建
DOM节点(Node)通常对应于一个标签,一个文本,或者一个HTML属性。DOM节点有一个nodeType属性用来表示当前元素的类型,它是一个整数:
- Element,元素 ——1
- Attribute,属性 ——–2
- Text,文本 ——3
- comment 节点 ——8
- Document 节点 ——9
- DocumentFrament节点 ——11
- 其他的参见这
var el1 = document.createElement('div'); |
DOM 查询
元素查询的API返回的的结果是DOM节点或者DOM节点的列表。document提供了两种Query方法:
// 返回当前文档中第一个类名为 "myclass" 的元素 |
DOM事件
- element.addEventListener(type, listener, [, options])
给元素添加指定事件type以及响应该事件的回调函数listener。options也可以为Boolean值表示捕获阶段还是冒泡阶段执行默认为false,冒泡阶段执行 - element.removeEventListener(type, listener, [, options])
移除元素上指定事件,如果元素上分别在捕获和冒泡阶段都注册了事件,需要分别移除。 - document.createEvent()
创建一个自定义事件,随后必须使用init进行初始化。 - element.dispatchEvent(event)
对指定元素触发一个事件。
// 创建事件 |
样式操作
1、js如何操作class
加类: dom.classList.add(className); |
2、js如何操作style
如果属性有’-‘号,就写成驼峰的形式(如textAlign) 如果想保留 - 号,
就中括号的形式 element.style[‘text-align’] = ‘100px’;
3、设置style的属性
element.setAttribute('style', 'height: 100px !important'); |
4、使用setProperty 如果要设置!important,推荐用这种方法设置第三个参数
element.style.setProperty('height', '300px', 'important'); |
5、设置cssText
element.style.cssText += 'height: 100px !important'; |
6、insertRule()、addRule
[sheet].insertRule([CSS样式],指定位置) |
然后用JS获取这个样式表:
最后我们就可以给这个样式表中添加样式了:
var sheet = document.styleSheets[0]; |
sheet.insertRule(‘#box{width: 300px; height: 300px; background-color: #0f0;}’,0);
或者
// 或者插入新样式时操作 |
DOM元素的属性和方法
方法 | 描述 |
---|---|
element.id | 设置或者返回元素的 id 属性 |
element.className | 设置或者返回元素的 class 属性 |
element.style | 设置或返回元素的 style 属性 |
element.title | 设置或者返回元素的 title 属性 |
element.innerHTML | 设置或返回元素的内容 |
element.tagName | 返回元素的标签名 |
element.lastChiled | 返回元素的最后一个子元素 |
element.nodeValue | 设置或返回元素的值 |
element.nodeName | 返回元素的名称 |
element.nodeType | 返回元素的节点类型 |
element.toString() | 把元素转为字符串 |
element.textContent | 设置或者返回节点及其后代的内容 |
element.parentNode | 返回元素的父节点 |
element.appendChild() | 向元素添加新的子节点,作为最后一个子节点 |
element.cloneNode() | 克隆元素 |
element.getAttribute() | 返回元素节点的指定属性值 |
element.getAttributeNode() | 返回指定的属性节点 |
element.removeAttribute() | 从元素中移除指定属性 |
element.removeAttributeNode() | 移除指定的属性节点,并返回被移除的节点 |
element.hasAttribute() | 如果元素拥有指定属性,则返回true,否则返回false |
element.hasAttributes() | 如果元素拥有属性,则返回true,否则返回false |
element.hasChildNodes() | 如果元素拥有子节点,则返回true,否则返回false |
element.clientWidth | 返回元素的可见宽度 |
element.clientHeight | 返回元素的可见高度 |
element.offsetWidth | 返回元素的宽度 |
element.offsetHeight | 返回元素的高度 |
element.offsetLeft | 返回元素的水平偏移位置 |
element.offsetTop | 返回元素的垂直偏移位置 |
element.offsetParent | 返回元素的偏移容器 |
element.scrollWidth | 返回元素的整体宽度 |
element.scrollHeight | 返回元素的整体高度 |
element.scrollLeft | 返回元素左边缘与视图之间的距离 |
element.scrollTop | 返回元素上边缘与视图之间的距离 |
element.childNodes | 范湖元素子节点的 NodeList 。 |
nodelist.item() | 返回 NodeList 中位于指定下标的节点 |
nodelist.length | 返回 NodeList 中的节点数 |