1-1DOM:document object model 文档对象模型
HTML DOM 将 HTML 文档视作树结构。这种结构被称为节点树:
1-2节点
节点树就是由一个个节点组成
父(parent)、子(child)和同胞(sibling)等术语用于描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。
1-3获取节点
A.getElementById()
B.getElementsByTagName()
<div class="app">hello world</div><div class="test">good</div><script>var app=document.getElementsByTagName("div");console.log(Array.isArray (app))console.log(app.length)for(var i=0;i<app.length;i++){console.log(app[i])}</script>
C.getElementsByClassName()
<!-- div.one*4{hello $} --><div class="one">hello 1</div><div class="one">hello 2</div><div class="one">hello 3</div><div class="one">hello 4</div><script>//不能对HTML Collection执行点击事件,只能对具体元素执行点击事件var all=document.getElementsByClassName("one");// console.log(all);for(var i=0;i<all.length;i++){all[i].onclick=function(){// console.log("hello")//this-->在事件中,谁执行事件,this就指谁this.style.display="none"//点谁谁消失}}</script>
D.querySelectorAll()
<div id="app">app<div class="one">one1</div><div class="one">one1</div><div class="one">one1</div></div><script>var app=document.getElementById("app")console.log(app);//NodeList(节点列表)var all=document.querySelectorAll(".one")console.log(all);</script>
练习
实现下面的例子

<input id="input" type="checkbox">篮球<!-- 点击事件onclickinput输入框有checked,true表示选中,false表示没有选中--><script>var input=document.getElementById("input");input.checked=false;console.log(input.id)</script>
<button id="all">全选</button><button id="notall">不选</button><button id="reverse">反选</button><div><input type="checkbox">足球<input type="checkbox">蓝球<input type="checkbox">乒乓球<input type="checkbox">羽毛球</div><script>var all=document.getElementById("all");var inputs=document.getElementsByTagName("input");//1.对btn执行点击事件all.onclick=function(){//将所有的input的checked属性设置为truefor(var i=0;i<inputs.length;i++){inputs[i].checked=true;}}var all=document.getElementById("notall");var inputs=document.getElementsByTagName("input");//1.对btn执行点击事件all.onclick=function(){//将所有的input的checked属性设置为falsefor(var i=0;i<inputs.length;i++){inputs[i].checked=false;}}var all=document.getElementById("reverse");all.onclick=function(){for(var i=0;i<inputs.length;i++){console.log(inputs[i].checked)inputs[i].checked=(inputs[i].checked)?false:true;}}</script>
实现:
点击button按钮,如果div是显示的则隐藏,如果隐藏则显示
<div style="display: block;">div</div><button id="btn">btn</button><script>var div = document.getElementsByTagName("div")[0];var btn = document.getElementById("btn");btn.onclick = function () {var d = div.style.display;div.style.display = (d == "block") ? "none" : "block";}</script>
1-4修改元素节点的内容,样式
修改元素节点的内容
innerHTML
修改样式
object.style.color="pink";object.style["color"]="pink";
练习
练习:隔行变色

<ul><li>1</li> <!--lis[0]--><li>2</li><!--lis[1]--><li>3</li><!--lis[2]--><li>4</li><!--lis[3]--><li>5</li><!--lis[4]--></ul><script>// i%2 0%2-->0 1%2-->1 2%2-->0 3%2-->1 4%2-->0var lis=document.getElementsByTagName("li");for(var i=0;i<lis.length;i++){if(i%2==0){lis[i].style.backgroundColor="pink";}else{lis[i].style.backgroundColor="blue";}}</script>
1-5节点的分类nodeType
a.nodeType==1 为元素节点b.nodeType==2 为属性节点c.nodeType==3 位文本节点
<p id="app">hello</p><script>//getAttributeNode()获取属性节点 firstChild获取第一个子节点var app = document.getElementById("app");var id = app.getAttributeNode("id")console.log(app.nodeType);console.log(app.firstChild.nodeType);console.log(id.nodeType);</script>
1-6查找节点
//childNode 获取所有节点
//children 只获取元素节点(子节点)<ul id="app"><li>hello</li><li>hello</li><li>hello</li></ul><script>//childNode 获取所有节点//children 只获取元素节点(子节点)var app=document.getElementById("app")var childs=app.childNodes;var children=app.children;console.log(childs);console.log(children);</script>
1-7增加获取节点
appendChild(node)向父元素后面添加一个节点
createElement(); //创建元素节点
createTextNode(); //创建文本节点<div id="app"></div><script>var app=document.getElementById("app");var p=document.createElement("p");var txt=document.createTextNode("hello");//向父元素的后面添加一个节点p.appendChild(txt);app.appendChild(p);</script>
insertBefore(parentNode.insertBefore(newNode,targetNode))在某一元素前添加节点
给元素添加内容 innerHTML<ul id="app"><li>html</li><li id="h5">html</li></ul><script>//给元素添加内容 innerHTML// insertBefore 在某一元素前添加节点 (parentNode.insertBefor(newNode,targetNode))var app=document.getElementById("app");var h5=document.getElementById("h5");var li=document.createElement("li");li.innerHTML="vue";// console.log(li);app.insertBefore(li,h5);</script>
1-8删除节点
removeChild()删除节点(parentNode.removeChild(childNode))
<div id="app"><div id="child">hello</div></div><script>//removeChild()删除节点var app=document.getElementById("app");var child=document.getElementById("child");app.removeChild(child);</script>
1-9修改节点(替换节点)
replaceChild (newNode,targetNode)替换某个元素节点
<div id="app"><div id="child"></div></div><script>// replaceChild (newNode,targetNode)替换某个元素节点var app=document.getElementById("app");var child=document.getElementById("child");var p=document.createElement("p")p.innerHTML="hello";app.replaceChild(p,child);</script>
1-10克隆节点
cloneNode node.cloneNode(true)
<div id="app"><div id="one"></div></div><script>//cloneNodevar app=document.getElementById("app");var one=document.getElementById("one");var test=one.cloneNode(true);console.log(test);app.appendChild(test);</script>
