JavaScript的DOM
1.DOM(文档对象模型)
- 当网页被加载时,浏览器会创建DOM,DOM属于BOM的一部分,对document的操作。
- HTML DOM被构造为对象的树。 DOM树。
- DOM树包含 HTML元素,HTML文本,HTML属性。
- JavaScript通过DOM可以改变HTML元素,HTML文本,HTML属性(CSS样式),事件做出反应
2.DOM是什么?
- 文档对象模型,是HTML文档的编程接口
- 当网页被加载时,浏览器会创建页面的文档对象模型
3.DOM做什么?
- JavaScript可以改变页面中所有HTML元素(内容)
- JavaScript可以改变页面中所有的HTML属性
- JavaScript可以改变页面中所有的CSS样式
- JavaScript对页面中的所有事件做出反应
通过DOM获取元素getElement
1.通过id获取元素 唯一 getElementById(“id名”)
<ul>
<li class="item">列表01</li>
<li class="item">列表02</li>
<li>列表03</li>
<li>列表04</li>
</ul>
<p class="text">这是一个段落</p>
<form action="">
<input type="radio" name="sex">男
<br>通过
<input type="radio" name="sex">女
</form>
var oHeader=document.getElementById("header");
console.log(oHeader);//<h1 id="header">通过DOM获取元素</h1>
2.通过class获取一个或多个元素 getElementsByClassName(“class名”)
var aItem=document.getElementsByClassName("item");
console.log(aItem);//HTMLCollection(2) [li.item, li.item]
aItem[0].onmouseover=function(){
alert(this.innerText);
}
var aText1=document.getElementsByClassName("text");
console.log(aText1);//HTMLCollection [p.text]
var oText1=document.getElementsByClassName("text")[0];
console.log(oText1);//<p class="text">这是一个段落</p>
HTMLCollection 集合,类似于数组(伪数组)
3.通过标签名获取元素 一个或多个 getElementsByTagName
var aItem = document.getElementsByTagName("p");
console.log(aItem);
4.通过 name 获取元素 主要用于form表单 getElementsByName(“name名”)
var aRadio=document.getElementsByName("sex");
console.log(aRadio);//NodeList(2) [input, input]
aRadio[0].onchange=function(){
alert(this.value);
}
5.getElementsByTagNameNS() 获取多种元素
console.log(document.getElementsByTagNameNS("p","span"));
6.获取根节点 getRootNode()
console.log(document.getRootNode());
7.通过元素可以获取元素
var oWrap=document.getElementById("wrap");
console.log(oWrap);
// 不能通过元素去获取通过id获取的元素
console.log(oWrap.getElementsByClassName("text"));
通过DOM获取元素querySelector
1.通过选择器的方式 querySelector() 获取到一个元素
// 获取元素 选择器 只获取第一个元素
var oText2=document.querySelector(".text");
console.log(oText2);
var oHeader1=document.querySelector("#header");
console.log(oHeader1);
var oLi1=document.querySelector("li");
console.log(oLi1);
2.querySelectorAll() 获取多个
var aLi1=document.querySelectorAll("li");
console.log(aLi1);//NodeList(4) [li.item, li.item, li, li]
var aText3=document.querySelectorAll(".text");
console.log(aText3);//NodeList [p.text]
- getElement:动态获取
- querySelector:静态获取
DOM的节点
1.nodeType 返回节点类型
- 元素节点 返回1
console.log(oHeader.nodeType); //1
console.log(oText.nodeType); //1
- 属性节点 返回2
var attrNode = oHeader.getAttributeNode("id");
console.log(attrNode.nodeType);//2
- 文本节点 返回3
var content = oHeader.firstChild; //获取第一个子节点
console.log(content.nodeType);//3
- 注释节点 返回8
console.log(oList.firstChild.nodeType);//8
- document 返回9
console.log(document.nodeType);//9
2.nodeName 返回节点名称
- 元素节点 返回大写的标签名
console.log(oHeader.nodeName); //H2
console.log(oText.nodeName); //P
- 属性节点 返回属性名
console.log(attrNode.nodeName); //id
- 文本节点 #text
console.log(content.nodeName); //#text
- 注释节点 #comment
console.log(oList.firstChild.nodeName);//#comment
- document #document
console.log(document.nodeName);//#document
3.nodeValue 返回节点值
- 元素节点 null
console.log(oHeader.nodeValue); //null
console.log(oText.nodeValue); //null
console.log(oItem.nodeValue); //null
- 属性节点 返回属性值
console.log(attrNode.nodeValue); //header2
- 文本节点 返回文本内容
console.log(content.nodeValue);//这是一个h2标签
- 注释节点 返回注释内容
console.log(oList.firstChild.nodeValue);
- document 返回null
console.log(document.nodeValue);//null
nodeType | nodeName | nodeValue | |
---|---|---|---|
元素节点 | 1 | 大写的标签名 | null |
属性节点 | 2 | 属性名 | 属性值 |
文本节点 | 3 | #text | 文本内容 |
注释节点 | 8 | #comment | 注释内容 |
document | 9 | #document | null |
DOM元素的属性
1.获取元素的属性 getAttribute(“属性名”) 返回属性值(行内的属性) 查
console.log(oBox.getAttribute("id"));
console.log(oBox.getAttribute("class"));
console.log(oBox.getAttribute("style"));
console.log(oImage.getAttribute("alt"));
2.设置属性 setAttribute(“属性名”,“属性值”) 改
document.getElementById("tab").onclick=function(){
// oBox.setAttribute("class","box2");
oImage.setAttribute("src","./car.jpg")
}
3.移除属性 removeAttribute(“属性名”) 删
document.getElementById("remove").onclick=function(){
oBox.removeAttribute("style");
}
4.创建属性 createAttribute(“属性名”) 自定义 增
var attr=document.createAttribute("abc");
attr.value="自定义的属性";
document.getElementById("add").onclick=function(){
oBox.setAttributeNode(attr)
}
DOM中HTML改变输出流
1.document.write()
// 入口函数
// 当文档加载完成后 执行
window.onload = function () {
document.write("改变输出流");//会覆盖文档
}
2.document.writeln 换行
document.write("<pre>");
document.writeln("改变输出流1");
document.writeln("改变输出流2");
document.writeln("改变输出流3");
document.writeln("改变输出流4");
document.write("<pre/>");
//需要<pre></pre>
DOM中HTML改变输出内容
1.innerHTML 属性 获取/设置元素的内容(可以解析标签)
aBtns[0].onclick=function(){
oBox.innerHTML="<b style='color:yellow'>这是通过innerHTML设置的内容</b>"
}
2.innerText 属性 获取/设置元素的文本内容
aBtns[1].onclick=function(){
// oBox.innerHTML="这是通过innerText设置的内容"
oBox.innerText="<b style='color:yellow'>这是通过innerText设置的内容</b>"
}
3.outerHTML 属性 获取/设置元素的内容 包含自身
console.log(oBox.outerHTML);
4.outerText 属性 获取/设置元素的文本内容
console.log(oBox.outerText);
DOM中HTML改变输出属性
1.src 属性 路径属性 获取/设置文件的路径
console.log(oImage.getAttribute("src"));
console.log(oImage.src);
aBtns[0].onclick=function(){
oImage.src="./128.png"
}
2.className 属性 获取/设置元素的类名
console.log(oHeader.getAttribute("class"));
console.log(oHeader.className);
aBtns[1].onclick=function(){
oHeader.className="shuishen xiaomihu"
}
3.style 属性 获取/设置元素的样式(仅限于行内样式)
console.log(oHeader.style);//返回样式对象
console.log(oPara.style.color);
aBtns[2].onclick=function(){
oHeader.style="color:pink"
oHeader.style.color="pink"
oHeader.style="background-color:pink"//-无法生效
oHeader.style.backgroundColor="pink";//驼峰
}
DOM节点的查找(遍历)
遍历(Traversal),是指沿着某条搜索路线,依次对树(或图)中每个节点均做一次访问
通过某一个元素查找另外一个元素
- 父子元素
1.children 返回子(元素)节点,不包含文本(空)节点
console.log(oWrap.children);//
2.childNodes 返回子节点,包含文本(空)节点
console.log(oWrap.childNodes);//text 空文本
3.firstElementChild 第一个子(元素)节点,不包含空节点
console.log(oWrap.firstElementChild.firstChild);
4.firstChild 第一个子节点,(包含文本)
console.log(oWrap.firstChild);
5.lastElementChild 最后一个子(元素)节点,不包含空节点
console.log(oWrap.lastElementChild);
6.lastChild 最后一个子节点,(包含文本)
console.log(oWrap.lastChild);//#text
7.parentNode 返回父级节点
console.log(oBox.parentNode.parentNode);
8.parentElement 返回父级(元素)节点
console.log(oBox1.parentElement);
9.offsetParent 相对关系 返回第一个有定位属性的祖先元素 ,如果没有,则返回body
console.log(oBox.offsetParent);
// 链式操作
console.log(oWrap.firstElementChild.firstElementChild);
- 兄弟(同胞)元素
10.nextElementSibling 下一个兄弟(元素)节点
console.log(oBox.nextElementSibling.nextElementSibling);
11.nextSibling 下一个兄弟节点,包含文本
console.log(oBox.firstChild.nextSibling);
console.log(oBox.nextSibling);
12.previousElementSibling 前一个兄弟节点,不包含文本
console.log(oBox.previousElementSibling);
13.previousSibling 返回上一个兄弟节点 包含文本
console.log(oBox.previousSibling);
DOM添加节点(增)
1.创建节点 createElement(“标签/元素节点名”)
var newP1=document.createElement("P");
newP1.innerText="这是新创建的段落标签05";
newP1.style.background="skyblue";
2.appendChild() 向父元素的子节点末尾添加元素(追加)
oBox.appendChild(newP1);
oBox.appendChild(newP2);
oBox.appendChild(newP3);
3.insertBefore(添加的节点,参考的兄弟元素)
oBox.insertBefore(newP1,aParas[1]);
DOM移除节点(删)
removeChild(要移除的元素)
oBox.removeChild(aParas[3]);
DOM替换元素(改)
replaceChild(新元素,旧元素)
oBox.replaceChild(newP1,aParas[1]);