JavaScript 操作元素与节点
操作元素
获取/修改元素样式属性
示例 1:
要求
:点击修改 p
标签文本的颜色(默认为黑色
)
步骤:
- 获取元素:
querySelector
- 修改元素的样式
style
属性
代码实现:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>修改元素属性</title>
</head>
<body>
<p>我爱你,中国</p>
</body>
<script>
// 目的:点击后修改p标签文本内容颜色
// (1) 获取元素
var p = document.querySelector("p");
// (2) 绑定点击事件
p.onclick=function() {
//获取当前p标签文本颜色(默认黑色)
var color = p.style.color;
//修改style属性
if(color == '' || color == "black") {
p.style.color = "red";
p.style.fontSize="2em";
}else {
p.style.color = "black";
p.style.fontSize="1em"
}
}
</script>
</html>
示例 2:
要求
:点击页面切换白天与夜间模式
步骤:
- 获取元素:
querySelector
- 绑定点击事件
代码实现:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>切换夜间模式</title>
<style>
/* 白天模式:白底黑字 */
.day {
background-color: white;
color: black;
}
/* 夜间模式:黑底白字 */
.black {
width:200px;
height:100px;
background-color: black;
color: white;
}
</style>
</head>
<body>
<p class="day">我是Java小菜鸟~</p>
</body>
<script>
var p = document.querySelector("p");
//绑定点击事件
p.onclick=function() {
//class 属性,在JavaScript的元素对象属性为className
var cls = p.className;
if(cls == "day") {
p.className = "black";
}else {
p.className = "day";
}
}
</script>
</html>
白底黑字显示
黑底白字显示:
获取/修改表单元素属性
表单:(主要是指
input
标签)的以下属性都可以通过DOM
来修改;
value
:input
的值.
disabled
: 禁用
checked
: 复选框会使用
selected
: 下拉框会使用
type
:input
的类型(文本, 密码, 按钮, 文件等)
示例 1:切换按钮的文本
:
代码实现:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
切换播放/暂停:<input type="button" id="btn" value="播放">
</body>
<script>
var btn = document.querySelector("#btn");
btn.onclick = function() {
var content = btn.value;
if(content == "播放") {
//切换显示的内容为暂停
btn.value = "暂停";
}else{
btn.value = "播放";
}
}
</script>
</html>
示例 2:点击计数
代码实现:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
点击计数:<input type="text" id ="sum" value="0">
<input type="button" id="sum_btn" value="点我加1">
</body>
<script>
var sum=document.querySelector("#sum");
var sumBtn=document.querySelector("#sum_btn");
sum_btn.onclick=function() {
//+会将字符串转成数值
var count = +sum.value;
sum.value=count+1;
}
</script>
</html>
示例 3: 全选/取消全选
代码实现:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
全部取消或选中:
<input type="checkbox" id="all">全部都选
<input type="checkbox" class="item">宋江
<input type="checkbox" class="item">李逵
<input type="checkbox" class="item">林冲
<input type="checkbox" class="item">关胜
</body>
<script>
//全部选中
var all = document.querySelector("#all");
// 子复选框:注意是采用querySelectorAll
var items = document.querySelectorAll(".item");
all.onclick = function () {
for (item of items) {
item.checked = all.checked;
}
}
//当每一个子复选框被选中的时候,all复选框也被选中
for (item of items) {
//给每一个都绑定点击事件
item.onclick = function () {
let allChecked = true;
for (it of items) {
if (!it.checked) allChecked = false;
}
all.checked = allChecked;
}
}
</script>
</html>
操作节点
新增节点
步骤
:
- 创建元素节点;
- 把元素节点插入到
DOM
树中;
(1)创建元素方法: createElement
格式:
var element = document.createElement(tagName[, options]);
目的:实现在文本框输入内容后,将内容显示在段落中
代码实现:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<input type="text" id="content">
<input type ="button" id="add" value="添加文本框内容为一个段落">
<div id="container">
<h3>显示的内容</h3>
</div>
</body>
<script>
// 获取文本框内容,添加到container中
var add=document.querySelector("#add");
var content=document.querySelector("#content");
var container =document.querySelector("#container");
//绑定点击事件
add.onclick=function() {
var text=content.value;
//创建一个DOM元素(<p>),添加到container内,作为最后一个子节点
var p=document.createElement("p");
p.innerHTML=text;
//将p添加到DOM树型结构中
container.appendChild(p);
}
</script>
</html>
(2)采用 insertBefore
将节点插入到指定节点之前;
格式:
var insertedNode = parentNode.insertBefore(newNode, referenceNode)
其中:
insertedNode
被插入节点 (newNode)parentNode
新插入节点的父节点;newNode
用于插入的节点- referenceNode ,newNode 将要插在这个节点之前;
如果 referenceNode
为 null
,则 newNode
将被插入到子节点的末尾;
目的:实现在节点1,2,3,4
前面插入一个新结点;
代码实现:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h3>测试insertBefore</h3>
<div id="insertBeforeDiv">
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
</div>
<script>
//insertBefore:在某个节点前插入另一个节点
var insertBeforeDiv = document.querySelector("#insertBeforeDiv");
//准备要插入的节点
var insertNode = document.createElement("p");
insertNode.innerHTML = "新插入的节点";
insertBeforeDiv.insertBefore(insertNode, insertBeforeDiv.children[0]);
</script>
</html>
删除节点
使用 removeChild
删除子节点;
格式:
oldChild = element.removeChild(child);
其中:
child
为待删除节点;element
为child
的父节点;- 返回值为该被删除节点;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h3>添加或插入页面已有的节点,原节点就没有了(相当于是移动元素)</h3>
<p id="beInsert">原p节点</p>
<ul>
<li>
<p>1</p>
</li>
<li>
<p>2</p>
</li>
</ul>
</body>
<script>
//使用appendChild,和insertBefore,要注意,如果添加或插入的节点,是页面已有的节点,那么在添加或插入后,原有的节点就没有了
//beInsert节点,插入到ul的第一个li标签前
var beInsert = document.querySelector("#beInsert");
var ul = document.querySelector("ul");
//构造一个li标签
var li = document.createElement("li");
li.appendChild(beInsert);//<li><p>beInsert内容</p></li>
ul.insertBefore(li, ul.children[0]);
//删除ul中最后一个li
var last = ul.children[ul.children.length - 1];//取最后一个li节点
ul.removeChild(last);
</script>
</html>