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">篮球
<!-- 点击事件onclick
input输入框有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属性设置为true
for(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属性设置为false
for(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-->0
var 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>
//cloneNode
var app=document.getElementById("app");
var one=document.getElementById("one");
var test=one.cloneNode(true);
console.log(test);
app.appendChild(test);
</script>