在 HTML DOM (文档对象模型)中,每一个部分都是节点:
文档自己是文档节点
全部 HTML 元素是元素节点
全部 HTML 属性是属性节点
HTML 元素内的文本是文本节点
注释是注释节点css
1.重要节点类型:标签(元素)节点,属性节点,文本节点。html
2.重要节点属性:
(1)nodeType 节点类型(数字表示,标签1,属性2,文本3)
(2)nodeName 节点名字
(3)nodeValue 节点值
3.不一样类型节点的属性取值node
标签节点 | 属性节点 | 文本节点 | |
nodeType节点类型 | 1 | 2 | 3 |
nodeName节点名字 | 对应的标签名 | 对应的属性名 | #text |
nodeValue节点值 | null | 对应的属性值 | 对应的文本内容 |
[next(previous)Sibling]、[next(previous)ElementSibling]浏览器
.nextSibling :
返回指定节点以后紧跟的节点(同级)。
被返回的节点以 Node 对象返回,元素中的空格被视做文本,而文本被视做文本节点
IE8及以前的浏览器会忽略空白文本节点app
function getPrevNode (dom){ var preNode=dom.previousSibling; var txt=preNode.nodeValue.trim(); //' ' if(preNode.nodeType==3 && txt.length==0){ return preNode.previousSibling }else{ return preNode } }
.nextElementSibling:
IE8及以前的浏览器不支持这个属性,只会得到标签节点dom
//解决兼容性的问题 function getNextElement(element){ if(element.nextElementSibling){ return element.nextElementSibling; }else{ var ele = element.nextSibling; console.log(ele) while(ele && ele.nodeType !==1){ ele= ele.nextSibling; } return ele; } }
.firstChild:
全部的浏览器都支持的,获取标签节点、文本节点,
可是IE8及以前的低版本的浏览器,是能够忽略空白文本节点的而得到的是标签节点ide
.firstElementChild:
IE8及以前的低版本的浏览器不支持,直接获取父元素的第一个标签节点code
function getFirstElementChild(element){ if(element.firstElementChild){ return element.firstElementChild; }else{ var ele = element.firstChild; while(ele && ele.nodeType !==1){ ele = ele.nextSibling; } return ele; } } function getLastElementChild(element){ if(element.lastElementChild){ return element.lastElementChild; }else{ var ele = element.lastChild; while(ele&&ele.nodeType!==1){ ele= ele.previousSibling; } return ele; } }
总结htm
document.createElement("标签名");//建立元素节点;
document.createTextNode("txt");//建立文本节点;对象
1.父级元素. appendChild(节点元素)--把节点插入到父节点的末尾
2.父级元素.insertBefore(新节点,插入位置)--把新节点插入到位置的前面
cloneNode(boolean值)
1.该方法将复制并返回调用它的节点的副本。
2.若是传递的参数是 true,将递归复制当前节点的全部子孙节点。False的话只复制当前节点。
若是参数为False的话,仅仅克隆的是一个标签(不传参,默认值为false)
若是参数为true的话,标签之间的内容也会克隆,也叫作深度克隆
3.返回的节点不属于文档树,它的 parentNode 属性为 null。
4.当复制的是 Element 节点时,它的全部属性都将被复制。可是,当前节点上注册的事件不会被复制
1.对象.的方式设置、获取属性[元素是DOM对象]
例如:txt.value=”123”;{不能设置、获取自定义属性}
2.setAttribute(属性名,属性值) :设置属性,也可设置自定义属性,推荐使用
注意:设置已经存在的属性时,会将原来的属性值覆盖
3.getAttribute() 可得到行内的原生属性,也可得到自定义属性
4.removeAttribute(要移除的属性名) 完全删除
给元素设置样式的两种形式(经过对象.的方式):
1.设置类名
className:元素的一个属性,设置类名;
[加入要为某个元素添加多个样式时,能够将样式都放在一个css的类样式中,而后经过元素的属性className获取该类名。]
IE6/7不支持setAttribute('class',xxx)方式设置元素的class。
IE8/9/10/Firefox/Safari/Chrome/Opera不支持setAttribute('className',xxx)方式设置元素的class
全部浏览器都支持
dom.className = dom.className.replace("hide","show");
//字符串的替换,仅仅是替换了要替换的字符,不改变其它的
2.Style:元素的一个属性,经过其设置一个样式。
例如:
dom.style.backgroundColor='red'; //将样式的中横线写法换成驼峰的写法 dom.style.background='red'; dom.style.color='red';
1.设置类名:dom.className='类名'; 2.清除类名:dom.className=''; 3.完全清除类的属性:dom.removeAttribute('class')
获取内容区别:
1.innerText只打印标签之间的文本内容,不打印标签
2.innerHTML,不但打印文本内容,连标签间的标签也打印出来。高版本浏览器会将格式原样输出
设置内容区别:
1.innerText 设置内容时,没法设置标签,会将标签进行转义。
2.innerHtml设置内容时,能将里面的标签渲染成正常的html标签 。
小结:
(1)innerHTML全部的浏览器都支持,不但获取文本,还获取标签间的标签。
(2)innerText是老版本的火狐浏览器不支持,只支持用textContent;
(3)textContent是Ie8以前的浏览器不支持,只支持innerText;
凡是经过js来设置页面的标签均可以称为动态的建立页面元素。
1.document.write() 几乎是不多用的
2.InnerHTML:直接在里面写html代码生成标签
3.document.creatElement(标签名):建立一对标签
obj.style:只能获取html标签中的style属性中的值(style="...")
获取定义在<style type="text/css">里面属性方法:
.currentStyle(IE外部css文件)
.getComputedStyle (FF,只读,不能设置)
var btn=document.getElementById("button") btn.onclick = function() { var oStyle = btn.currentStyle? btn.currentStyle : getComputedStyle(btn, null); /*alert(oStyle.height);*/ alert(oStyle['height']); };
注册事件
1.行内式注册事件(在标签内)
2.内嵌式注册事件
事件:
1.onfocus
2.onblur
3.onchange
4.onmouseover
5.onload
6.onkeyup
btn.onclick = function(e){ // 经过事件对象能够得到一些与事件相关的一些信息 // 事件对象里面存储了一些与事件相关的属性或是方法 // e.clientX pageX screenX // IE8以前是不支持event window.event IE8也有事件对象,只不过是存在window属性里面,必须经过Window.event才能拿到 e = e || window.event; console.log(e) }