什么是dom?
dom不是javascript,dom是文档。
dom是一组用来描述脚本怎么与结构化文档进行交互和访问的web标准。
dom定义了一系列对象、方法和属性,用于访问、操作和创建文档中的内容、结构、样式以及行为。
dom可以说就是为了获得对象而存在的。
如果你有其他的方法,你就可以替代dom的作用。
节点
根据DOM,HTML文档中的每个成分都是一个节点。
DOM是这样规定的:
整个文档是一个文档节点
每个HTML标签是一个元素节点
包含在HTML元素中的文本是文本节点
每一个HTML属性是一个属性节点
注释属于注释节点
document.getElementById() 根据Id获取元素节点
document.getElementsByName() 根据name获取元素节点
document.getElementsByTagName() 根据HTML标签名获取元素节点,注意getElements***的选择器返回的是一个NodeList对象,能根据索引号选择其中1个,可以遍历输出。
复制代码
document.getElementsByClassName() 根据class获取元素节点
javascript中的CSS选择器
文档结构和遍历 ———
(1)作为节点数的文档
1、parentNode 获取该节点的父节点
2、childNodes 获取该节点的子节点数组
3、firstChild 获取该节点的第一个子节点
4、lastChild 获取该节点的最后一个子节点
5、nextSibling 获取该节点的下一个兄弟元素
6、previoursSibling 获取该节点的上一个兄弟元素
7、nodeType 节点的类型,9代表Document节点,1代表Element点,3Text节点,8代表Comment节点,11代表DocumentFragment节点
8、nodeVlue Text节点或Comment节点的文本内容
9、nodeName 元素的标签名(如P,SPAN,#text(文本节点),DIV),以大写形式表示
注意,以上6个方法连元素节点也算一个节点。
(2)作为元素树的文档
1、firstElementChild 第一个子元素节点
2、lastElementChild 最后一个子元素节点
3、nextElementSibling 下一个兄弟元素节点
4、previousElementSibling 前一个兄弟元素节点
5、childElementCount 子元素节点个数量
注意,此5个方法文本节点不算进去
javascript操作HTML属性
1、属性的读取,此处要注意的是,某些HTML属性名称在javascript之中是保留 字,因此会有些许不同,如class,lable中的for在javascript中变为 htmlFor,className。
2、属性的设置,此处同样要注意的是保留字
3、非标准HTML属性
getAttribute(); //注意这两个方法是不必理会javascript保留字的,HTML属性是什么就怎么写。
setAttribute();
4、Attr节点的属性
attributes属性 非Element对象返回null,Element一半返回Attr对象。Attr对象是一个特殊的Node,通过name与value获取属性名称与值。
如:document.getElementById("img1")[0];
document.getElementById("img1").src;
元素的内容
1、innerText、textContent innerText与textContent的区别,当文本为空时,innerText是”“,而textContent是undefined
2、innerHTML
我是第一个P
我是第二个P
window.onload = function () {
alert(document.getElementById(“p1”).innerText); //注意火狐浏览器不支持innerText
alert(document.getElementById(“p1”).textContent); //基本都支持textContent
document.getElementById(“p1”).textContent = “我是p1,javascript改变了我”; //设置文档Text
alert(document.getElementById(“p2”).textContent);
alert(document.getElementById(“p2”).innerHTML); //innerHTML与innerText的区别,就是对HTML代码的输出方式Text不会输出HTML代码
}
创建,插入,删除节点
1、document.createTextNode() 创建一个文本节点
2、document.createElement() 创建一个元素节点
3、插入节点
appendChild() //将一个节点插入到调用节点的最后面
insertBefore() //接受两个参数,第一个为待插入的节点,第二个指明在哪个节点前面,如果不传入第二个参数,则跟appendChild一样,放在最后。
`<div id="div1">
<p id="p1">我是第一个P</p>
</div>
window.onload = function () {
var pNode1 = document.createElement("p");
pNode1.textContent = "insertBefore插入的节点";
var pNode2 = document.createElement("p");
pNode2.textContent = "appendChild插入的节点";
document.getElementById("div1").appendChild(pNode2);
document.getElementById("div1").insertBefore(pNode1,document.getElementById("p1"));
}`
删除和替换节点。
1、removeChild(); 由父元素调用,删除一个子节点。注意是直接父元素调用,删除直接子元素才有效,删除孙子元素就没有效果了。
2、replaceChild() //删除一个子节点,并用一个新节点代替它,第一个参数为新建的节点,第二个节点为被替换的节点
javascript操作元素CSS
通过元素的style属性可以随意读取和设置元素的CSS样式,例子: