dom就是暴露的接口,内容太多,参见这个文档:
dom概述
1,DOM — > Document Object Model(文档对象模型)
2,DOM 定义了表示和修改文档所需的方法(对象、这些对象的行为和属性以及这些对象之间的关系。)DOM 对象即为宿主对象,由浏览器厂商定义,用来操作 html和 xml 功能的一类对象的集合。也有人称 DOM 是对 HTML 以及 XML 的标准编程接口。
3,dom不能改变 css 样式表,但可以间接改变行间样式的 css
样例
选项卡
小方块移动
键盘控制方块移动
document
代表整个文档(如果给 html 标签上面再套一层标签就是 document)
getElementById()
//元素 id 在 Ie8 以下的浏览器,不区分 id 大小写,而且也返回匹配 name 属性的元素
getElementsByTagName()
//标签名,这是一个类数组,dom中接口生成的数组都是类数组
getElementsByClassName
//IE8及以下不支持
getElementsByName()
//不是在所有的浏览器都能用——开发一般不用
querySelector()
// css 选择器,只能选一个,在 ie7 和 ie7 以下的版本中没有
querySelectorAll()
// css 选择器,全选,选一组,在 ie7 和 ie7 以下的版本中没有
querySelectorAll()和.querySelector()选出来的元素不是实时的(是静态的)是一个镜像,所以一般不用,其他的再怎么修改,跟原来的没有关系
node
遍历节点树:(灵活,兼容好)——关系类的选择
parentNode → 父节点 (最顶端的 parentNode 为#document),元素的父节点只有一个
childNodes → 子节点们(直接的节点数)节点包括文本节点,属性节点
firstChild → 第一个子节点
lastChild → 最后一个子节点
nextSibling →后一个兄弟节点
previousSibling → 前一个兄弟节点
遍历元素节点树
parentElement -> 返回当前元素的父元素节点 (IE 不兼容)
children -> 只返回当前元素的元素子节点
firstElementChild -> 返回的是第一个元素节点(IE 不兼容)
lastElementChild -> 返回的是最后一个元素节点(IE 不兼容)
nextElementSibling / previousElementSibling ->返回后一个/前一个兄弟元素节点
(IE 不兼容)
除 children 外,parentElement、node.childElementCount、firstElementChild、lastElementChild、nextElementSibling、 previousElementSibling 在 ie9 及以下不兼容
节点的属性
nodeName
元素的标签名,以大写形式表示,只读,不能写
nodeValue
Text 文本节点或 Comment 注释节点的文本内容,可读写
nodeType(最有用)
该节点的类型,只读返回这个 div 的所有的元素节点
attributes
Element 节点的属性集合
节点的一个方法 Node.hasChildNodes();——他有没有子节点,返回值是 true 或 false
DOM
结构 查找
1.getElementById 方法定义在 Document.prototype 上,即 Element 节点上不能使用。
2.getElementsByName 方法定义在 HTMLDocument.prototype 上,即非 html 中的document 以外不能使用(xml document,Element)
3.getElementsByTagName 方法定义在 Document.prototype 和 Element.prototype 上
4,HTMLDocument.prototype 定义了一些常用的属性,body,head,分别指代 HTML 文档
中的标签
5.Document.prototype 上定义了 documentElement 属性,指代文档的根元素,在 HTML文档中,他总是指代元素
6.getElementsByClassName、querySelectorAll、querySelector 在 Document,Element 类
中均有定义
基本操作
增
document.createElement() //增加或创建元素节点(标签)——常见
document.createTextNode(); //创建文本节点
document.createComment(); //创建注释节点
document.createDocumentFragment(); //创建文档碎片节点,最后讲
document.body.appendChild(div)
插——剪切操作
PARENTNODE.appendChild() 可以理解成.push
后append的push到后面,如果push已经存在的节点,是剪切操作,如下图所示
PARENTNODE.insertBefore(a, b) 一定是 div 先 insert a,before b
删
parent.removeChild() //就是被剪切出来了
child.remove() //自尽,完全删除
替换
parent.replaceChild(new, origin) //用新的 new 去置换旧的 origin,origin被剪切出来
Element 节点的一些属性
innerHTML ==> 可取,可写,可赋值
innerText ==> 可取,可赋值,赋值要谨慎,会把所有结构换成text (老版本火狐不兼容) / textContent(火狐使用这个,老版本 IE 不好使)
Element 节点的一些方法
ele.setAttribute() //设置
ele.getAttribute(); //取这个值
把datalog发到服务器,用于统计点击
如果想改变一个 div 结构或 dom 结构或 html 结构的 class,直接用 div.className=””就可以了,不用 setAttribute
脚本化CSS
读写元素 css 属性
dom.style.prop //常用,只有这个可读可写,其余只能读
- 只可读写行间样式,没有兼容性问题,碰到 float 这样的关键字属性,前面应加 css(行
间样式以外没用)
- eg:float — > cssFloat
- 符合属性必须拆解(建议),组合单词变成小驼峰式写法 “backgroundColor” “borderRadius”
- 写入的值必须是字符串格式
只是读写行间样式,不可读写页面头style和css文件
查询计算样式
getComputedStyle
window.getComputedStyle(ele,null); //原生底层的方法。展示权重最高的
//计算样式只读,不可以写入
//返回的计算样式的值都是绝对值,没有相对单位
//IE8 及 IE8 以下不兼容
//获取的是最终的显示值,不管是不是行间样式
理解 window.getComputedStyle(ele,null);第二个值是 null
获取伪元素的方法:window.getComputedStyle(ele,null);括号里面要填两个东西,第一
个 ele 是填的是你要获取谁,第二个先填写 null(null 解决的就是伪元素的问题,用
它可以获取伪元素的样式表)
改变伪元素
currentStyle
ele.currentStyle //展示权重最高的
//IE 独有的属性
//计算样式只读,不可以写入
//返回的计算样式的值不是经过转换的绝对值,是原封不动的