DOM操作
DOM(document object model) 操作
js
提供了一个document
对象,指向的是HTML,在js
中通过document
对象可以直接或者间接获取页面内容对应的标签
DOM操作具体内容 - 操作节点(节点就是标签)
-
直接获取节点
-
document.getElementById
(id属性值) - 通过id属性值获取标签 -
getElementsByClassName
(class属性值) -
getElementsByTagName
(标签名)
-
-
获取父节点:
节点.parentElement
- 获取指定节点的父节点 -
获取子节点:
节点.children
- 获取指定节点的所有子节点节点.firstElementChild
- 获取指定节点的第一个子节点节点.lastElementChild
- 获取指定节点的最后一个子节点
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id="box1">
<p id="p1">段落</p>
</div>
<div id="box2">
<a href="">百度</a>
<p id="p2">段落</p>
</div>
<div id="box3">
<p id="p3">段落</p>
</div>
<script type="text/javascript">
p1 = document.getElementById('p1')
console.log(p1)
p1.style.color = 'red'
// p1.style = 'color:red;'
p2 = document.getElementsByTagName('p')
console.log(p2)
colors = ['blue','green', 'pink']
for(x in p2){
p2[x].style = `color:${colors[x]};`
}
div1 = document.getElementById('p1').parentElement
console.log(div1)
</script>
</body>
</html>
-
添加节点
- 创建新的节点
document.createElement
(标签名) - 添加节点
节点1.appendChild
(节点2) - 在节点1的最后添加节点2(节点1和节点2是父子关系节点.inserBefore
(节点2,节点3)) - 在节点1中和节点3的前边添加节点2
- 创建新的节点
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script>
document.write('<span>aaaa</span>')
// 想在哪里加就写在哪里
</script>
<div id="div1">
<p>段落</p>
</div>
<script>
// 直接向body标签添加子标签
document.write('<span>aaaa</span>')
</script>
<script>
// 向p标签前添加新标签
a = document.createElement('a')
p = document.getElementById('p1')
div1 = document.getElementById('div1')
.insertBefore(a, p)
</script>
</body>
</html>
-
删除节点
remove()
- 删除节点节点.remove()
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<p id="p1">段落1</p>
<p>段落2</p>
<p>段落3</p>
</body>
<script>
p1 = document.getElementById('p1')
p1.remove()
p = document.getElementsByTagName('p')
console.log(p)
p[1].remove()
</script>
</html>
向节点中添加内容和属性
节点.innerText
– 标签内部的文字(子标签也属于文字)节点.innerHTML
– 标签内部的文字(包括子标签内部的文字)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<a class="a1">百度<b>一下</b></a>
<script>
a1 = document.getElementsByTagName('a')
// a1[0].innerText = 'HTML'
// a1[0].innerText = 'HTML<b>CSS</b>'
// a1[0].innerHTML = 'HTML'
a1[0].innerHTML = 'HTML<b>CSS</b>'
// 节点.属性 = 属性值 --->向节点内添加或修改属性
a1[0].href = 'https://www.baidu.com'
a1[0].target = '_blank'
// 通过js代码改变属性,用于网页源代码显示的伪装
a1[0].className = 'a2'
// a2属性实则是不存在的,a标签的属性值为a1
</script>
</body>
</html>
小案例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<!-- 修改标签内容 -->
<span>请输入姓名:</span><span id="name">张三丰</span>
<br>
<input type="text" name="" id="info">
<!-- onclick -- 点击事件 -->
<input type="submit" value="提交"
onclick = "document.getElementById('name').innerText=document.getElementById('info').value">
<br>
<!-- 修改图片 -->
<img src="img/cat_open.png" alt="" id="photo">
<input type="submit" value="更改图片"
onclick="document.getElementById('photo').src='./img/cat_close.png'">
<!-- 修改文字样式 -->
<p id="style">段落</p>
<input type="submit" value="华丽的"
onclick="document.getElementById('style').style = 'color:pink; font-size:20px;'">
<input type="submit" value="朴素的"
onclick="document.getElementById('style').style = ''">
<br>
<!-- 插入html代码 -->
<script type="text/javascript">
// Python的列表在其他编程语言中叫做数组。
titles = ['四川', '云南', '贵州', '湖北']
for (x in titles){
title = titles[x]
html_str = "<span id='one'>" + title + "</span><span>|</span>"
document.write(html_str)
document.getElementById('one').style = 'color:red'
}
// 报错: 开发者页面 console查看报错原因及位置
// for (x in titles):
// title = titles[x]
// html_str = "<span>" + title + "</span><span>|</span>"
// document.write(html_str)
// 报错:02%20js%E5%B0%8F%E6%…88%E4%BE%8B.html:40 Uncaught SyntaxError: Unexpected ':'
</script>
</body>
</html>
BOM操作
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script>
// 打开浏览器新标签页:window.open()
function openwindow1(){
w1 = window.open('https://www.baidu.com')
}
// 关闭刚打开的新标签页
function close1(){
w1.close()
}
// 打开新窗口
function openwindow2(){
w2 = window.open('https://www.baidu.com', '_blank', 'width=400,height=500')
w2.moveTo(500,200)
}
// 关闭新打开窗口
function close2(){
w2.close()
}
// 关闭当前窗口
function close3(){
window.close()
}
// 页面滚动(应用:瀑布式加载页面)(还需设置停顿)
function to_bottom(){
// window.scrollTo(x,y)
y = 0
y_max = 5000
while(y <= y_max){
y += 500
window.scrollTo(0,y)
}
}
// 页面横向滚动
function to_right(){
x = 0
x_max = 10000
while(x <= x_max){
x +=500
window.scrollTo(x,0)
}
}
</script>
<input type="submit" value="打开新窗口" onclick="openwindow2()">
<input type="submit" value="关闭新窗口" onclick="close2()">
<br>
<input type="submit" value="打开新标签页" onclick="openwindow1()">
<input type="submit" value="关闭标签页" onclick="close1()">
<input type="submit" value="关闭当前窗口" onclick="close3()">
<input type="submit" value="滚动到页面底部" onclick="to_bottom()">
<input type="submit" value="滚动到页面右部" onclick="to_right()">
<div style="width: 10000px; height: 5000px;"></div>
<p>页面底部</p>
</body>
</html>