对HTML文件的标签/元素/节点 的 增删改查
一.对节点 增、删、改、查
1.增 (添加新的节点/标签)
用到的方法:
- createElement (name)
- appendChild( ); 给元素/标签/节点 添加子节点
示例HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div class="div1">
<button onclick="add()">add</button>
hello div1
</div>
<div class="div2">
<button onclick="del()">del</button>
hello div2
</div>
<div class="div3">
<button onclick="change()">change</button>
<p>hello div3</p>
</div>
<div class="div4">hello div4</div>
<script>
function add() {
// 添加标签
var ele=document.createElement("p"); //<p></p>
ele.innerHTML="hello p"; //<p>hello p</p>
ele.style.color="red"; //<p style="color:red">hello p</p>
ele.style.fontSize="10px"; //<p style="color:red; fontSize:10px">hello p</p>
var father=document.getElementsByClassName("div1")[0]; //找到要添加子标签的父标签对象
father.appendChild(ele) //将创建的标签,添加到需要的标签下
}
</script>
</body>
</html>
View Code
2.删
- 获得要删除的元素
- 获得它的父元素
- 使用removeChild()方法删除
3.改
第一种方式:
- 使用上面增和删结合完成修改
第二种方式:
- 使用 setAttribute();方法修改属性
- 使用 innerHTML 属性修改元素的内容
4.查
使用之前的方法
<script type="text/javascript">
//在第一个div中动态增加一个a标签. 该a标签点击之后跳转到百度首页.
function addNode(){
//1.获得 第一个div
var div = document.getElementById("div_1");
//2.创建a标签 createElement==>创建一个a标签 <a></a>
var eleA = document.createElement("a");
//3.为a标签添加属性 <a href="http://www.baidu.com"></a>
eleA.setAttribute("href", "http://www.baidu.com");
//4.为a标签添加内容 <a href="http://www.baidu.com">百度</a>
eleA.innerHTML = "百度";
//5.将a标签添加到div中
div.appendChild(eleA);
}
//点击后 删除div区域2
function deleteNode(){
//1 获得要删除的div区域
var div = document.getElementById("div_2");
//2.获得父亲
var parent = div.parentNode;
//3 由父亲操刀
parent.removeChild(div);
}
//点击后 替换div区域3 为一个美女
function updateNode(){
//1 获得要替换的div区域3
var div = document.getElementById("div_3");
//2创建img标签对象 <img />
var img = document.createElement("img");
//3添加属性 <img src="001.jpg" />
img.setAttribute("src", "001.JPG");
//4.获得父节点
var parent = div.parentNode;
//5.替换
parent.replaceChild(img, div);
}
//点击后 将div区域4 克隆一份 添加到页面底部
function copyNode(){
//1.获取要克隆的div
var div = document.getElementById("div_4");
//2.克隆 参数为true 那么克隆时克隆所有子元素. false 只克隆自己
var div_copy = div.cloneNode(true);
//3.获得父亲
var parent = div.parentNode;
//4.添加
parent.appendChild(div_copy);
}
</script>
View Code
总结: 以上 增、删、改、查 的实例HTML如下: (重要)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div class="div1">
<button onclick="add()">add</button>
hello div1
</div>
<div class="div2">
<button onclick="del()">del</button>
hello div2
</div>
<div class="div3">
<button onclick="change()">change</button>
<h3>hello div3</h3>
</div>
<div class="div4">hello div4</div>
<script>
var num1=1;
function add() {
// 添加标签
var ele = document.createElement("p"); //<p></p>
ele.innerHTML = "hello p "+num1; //<p>hello p</p>
ele.style.color = "red"; //<p style="color:red">hello p</p>
ele.style.fontSize = "10px"; //<p style="color:red; fontSize:10px">hello p</p>
var father = document.getElementsByClassName("div1")[0]; //找到要添加子标签的父标签对象
father.appendChild(ele); //将创建的标签,添加到需要的标签下
num1++;
}
function del() {
//删除标签
var father = document.getElementsByClassName("div1")[0]; //找到目标标签
var sons = father.getElementsByTagName("p"); //找到父标签下的字标签数组 (得到的结果是数组,可能存在多个元素)
var son = sons[sons.length-1]; //提取最后一个元素
father.removeChild(son) //从父标签下,删除字标签
}
function change() {
//修改标签
var img=document.createElement("img"); //<img src="">
//img.setAttribute("src","meinv.jpg");
img.src="meinv.jpg";
var ele=document.getElementsByTagName("h3")[0]; //找到需要被替换/修改的标签
var father=document.getElementsByClassName("div3")[0]; //找到父标签
father.replaceChild(img,ele) //执行替换
}
</script>
</body>
</html>
View Code
二、对获取到的html标签,修改样式
1.修改html的标签内容
innerHTML ,innerText 属性。(注意两者的区别。innerHTML不但可以添加文本,还可以添加字标签【写成标签格式的字符串】。而innerText只能添加文本)
2.改变CSS样式
例如,有标签如下
<p id="p2">Hello world!</p>
在js里修改该便签的样式
<script>
var ele=document.getElementById("p2");
ele.style.color="blue"; //修改样式
ele.style.fontSize = "10px";
</script>
等同于直接在html标签里,添加样式
<p id="p2" style="color:red;font-size: 10px">Hello world!</p>
3. 关于html标签的class属性的操作
- elementNode.className 获取标签/节点的 class名称值
- elementNode.classList.add 对标签/节点的 calss列表,增加一个新的class名称
- elementNode.classList.remove 对标签/节点的 calss列表,删除指定的class名称
三、实例练习
1.全选、反选、取消选择
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<button onclick="selectAll()">全选</button>
<button onclick="Cancel()">取消</button>
<button onclick="reverse()">反选</button>
<hr>
<table border="1px" >
<tr>
<td><input type="checkbox"></td>
<td>111</td>
<td>111</td>
<td>111</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>222</td>
<td>222</td>
<td>222</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>333</td>
<td>333</td>
<td>333</td>
</tr>
</table>
<script>
function selectAll() {
//全选
var inputs=document.getElementsByTagName("input");
for (var i=0;i<inputs.length;i++){
var input=inputs[i]
input.checked=true;
}
}
function Cancel() {
//取消
var inputs=document.getElementsByTagName("input");
for (var i=0;i<inputs.length;i++){
var input=inputs[i]
input.checked=false;
}
}
function reverse() {
//反选
var inputs=document.getElementsByTagName("input");
for (var i=0;i<inputs.length;i++){
var input=inputs[i];
input.checked=!input.checked;
// if(input.checked){
// input.checked=false
// }else {
// input.checked=true
// }
}
}
</script>
</body>
</html>
View Code
2.模态对话框 (阴影显示其他区域)
思路,通过对具有多个class属性名称的标签,增加、删除一个calss名称
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.content{
height: 1800px;
background-color: white;
}
.shade{
position: fixed;
top:0;
left: 0;
right: 0;
bottom: 0;
background-color: gray;
opacity: 0.7;
}
.model{
width: 200px;
height: 200px;
background-color: bisque;
position: absolute;
top:50%;
left: 50%;
margin-top: -100px;
margin-left: -100px;
}
.hide{
display: none;
}
</style>
</head>
<body>
<div class="content">
<button onclick="show()">show</button>
hellohellohellohellohellohellohellohellohellohellohellohello
</div>
<div class="shade hide"></div>
<div class="model hide">
<button onclick="cancel()">cancel</button>
</div>
<script>
function show() {
var ele_shade=document.getElementsByClassName("shade")[0];
var ele_model=document.getElementsByClassName("model")[0];
ele_model.classList.remove("hide");
ele_shade.classList.remove("hide");
}
</script>
</body>
</html>
View Code
3.二级联动
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<select id="provinces">
<option value="">请选择省份</option>
</select>
<select name="" id="citys">
<option value="">请选择城市</option>
</select>
<script>
data={"河北省":["石家庄","廊坊"],"山西":["晋城","大同"],"陕西":["西安","延安"]};
var pro_ele=document.getElementById("provinces");
var city_ele=document.getElementById("citys")
for(var i in data){
var ele=document.createElement("option");
ele.innerHTML=i;
pro_ele.appendChild(ele)
}
pro_ele.onchange=function () {
console.log(this.selectedIndex); //当前select标签的已选择项的索引
console.log(this.options[this.selectedIndex])
var citys=data[this.options[this.selectedIndex].innerHTML];
city_ele.options.length=1; //只保留一个option,其它的删除
for(var i=0;i<citys.length;i++){
var ele=document.createElement("option");
ele.innerHTML=citys[i];
city_ele.appendChild(ele)
}
}
</script>
</body>
</html>
View Code
4.搜索框
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.div1,.div2,.div3,.div4{
width: 300px;
height: 100px;
}
.div1{
background-color: green;
}
.div2{
background-color: yellow;
}
.div3{
background-color: rebeccapurple;
}
.div4{
background-color: deeppink;
}
</style>
</head>
<body>
<input id="ID1" type="text" value="请输入用户名" onblur="Blurs()" onfocus="Focus()">
<script>
function Focus(){
var input=document.getElementById("ID1");
if (input.value=="请输入用户名"){
input.value="";
}
};
function Blurs(){
var ele=document.getElementById("ID1");
var val=ele.value;
if(!val.trim()){
ele.value="请输入用户名";
}
}
</script>
</body>
</html>
View Code
5.select标签里的option 左右移动
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.div1, .div2, .div3, .div4 {
width: 300px;
height: 100px;
}
.div1 {
background-color: green;
}
.div2 {
background-color: yellow;
}
.div3 {
background-color: rebeccapurple;
}
.div4 {
background-color: deeppink;
}
</style>
</head>
<body>
<div id="box1">
<select multiple="multiple" size="10" id="left">
<option>book</option>
<option>book2</option>
<option>book3</option>
<option>book4</option>
<option>book5</option>
<option>book6</option>
</select>
</div>
<div id="choice">
<input class="add" type="button" value="--->添加" onclick="add()"><br>
<input class="remove" type="button" value="<---移除" onclick="remove();"><br>
<input class="add-all" type="button" value="====>添加所有" onclick="ADDall()"><br>
<input class="remove-all" type="button" value="<===移除所有" onclick="remall()">
</div>
<div>
<select multiple="multiple" size="10" id="right">
<option>book9</option>
</select>
</div>
<script>
function add() {
//添加
var right = document.getElementById("right");
var options = document.getElementById("left").getElementsByTagName("option"); //获取所有的select标签下的所有option
for (var i = 0; i < options.length; i++) {
var option = options[i];
//判断option是否被选中
if (option.selected == true) {
right.appendChild(option); //将选中的option添加到另一个select标签里 //原select里的option就没有了
i--; //注意此处
}
}
}
function ADDall() {
var right = document.getElementById("right");
var options = document.getElementById("left").getElementsByTagName("option");
for (var i = 0; i < options.length; i++) {
var option = options[i];
right.appendChild(option);
i--;
}
}
function remall() {
var right = document.getElementById("right");
var options = right.getElementsByTagName("option");
right.options.length=0; //清空select标签下的所有option
}
</script>
</body>
</html>
View Code
==