/*
DOM(Document Object Model):文档对象模型
它是由W3C定义的一个标准
可以简单理解为对HTML中的元素进行操作的方法
我们在操作元素时,其实就是把元素看作一个对象
然后使用对象的属性和方法来进行相关操作
DOM结构:
html
head
title
meta
link
style
script
body
h1
p
div
span
父节点
如html是head和body的父节点
子节点
如li是ul/ol的子节点
option是select的子节点
兄弟节点
如上面的结构中 h1 p div是兄弟节点节点类型:
DOM节点共有12种类型
元素节点:1
属性节点:2
内容节点:3
可以通过nodeType属性来判断一个节点的类型
只有元素节点才可以拥有子节点,属性节点和内容节点不行获取元素
getElementById()
通过id来选中元素
不可以操作动态创建的DOM
返回单个元素
只能是document.getElementById()
getElementsByTagName()
可以操作动态创建的DOM
返回一个伪数组
除了可以document.getElementsByTagName()调用对象也可以是其他DOM
getElementsByClassName()
返回一个伪数组
不可以操作动态创建的DOM
querySelector()
document.querySelector("选择器") : 选取满足条件的第一个元素
其中选择器的写法和CSS中完全一样
querySelectorAll()
得到的是一个伪数组
document.querySelector("选择器") : 满足条件的所有元素
getElementsByName()
对于表单元素,有一个name属性,可以通过getElementsByName("name名")来获取.如单选按钮和复选框
document.title
选中标题
document.body
选中body
创建元素:
createElement()来创建一个元素节点,
createTextNode()来创建一个文本节点,
语法:
var e1=createElement("元素名");//创建元素节点
var txt=createTextNode('文本内容');//创建文本节点
e1.appendChild(txt);//把文本节点插入到元素节点中
e2.appendChild(e1);//把组装好的元素节点插入到已经存在的元素中
插入元素:
appendChild();//把一个新元素插入到父元素的内部末尾
insertBefore();//将新元素插入到父元素中某一个子元素之前
A.insertBefore(B,ref);//A表示父元素,B表示新子元素,ref表示指定子元素
删除元素:
A.removeChild(B);//从父元素A中删除某一个子元素B
复制元素:
obj.cloneNode(Bool);
obj表示被复制的元素,
bool
1:复制元素及所有子元素
0:仅复制元素本身
替换元素:
A.replaceChild(new,old);
A是父元素
new是新的子元素
old是需要被替换的元素
*/
*/
01获取元素示例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
window.onload =function(){
var oDiv = document.getElementById("div1");
oDiv.style.color = 'red';
// 注意getElementsByTagName的调用对象是父元素
// 返回的是一个类数组,要通过下标的方式取出单个元素才能设置样式
// 类数组 只能使用length属性和下标方式
oUl = document.getElementById('list');
var oLi = oUl.getElementsByTagName("li");
oLi[2].style.color= 'purple';
// 如果要设置每一个oLi则可以通过遍历数组来实现
var arr = ['js','css','html','jquery','vue','bootstrap']
for (var i=0;i<oLi.length;i++){
oLi[i].innerHTML=arr[i];
oLi[i].style.color='mediumpurple';
}
var oP=document.getElementsByClassName('p');
oP[0].style.backgroundColor='lightpink';
var oDiv2 = document.querySelector('.content');
oDiv2.style.backgroundColor = "#ffab00";
var oClass = document.querySelectorAll('.content');
console.log(oClass);
oClass[1].style.color='darkslategray';
var oLi1=document.querySelector('#list li:nth-child(2)');
oLi1.style.color='deepskyblue'
}
</script>
</head>
<body>
<div id="div1">
Javascript
</div>
<ul id="list">
<li>js</li>
<li>html</li>
<li>css</li>
<li>css</li>
<li>css</li>
<li>css</li>
</ul>
<p class = 'p'>
这是一个段落
</p>
<div class="content">
这是一个盒子
</div>
<p class='content'>这里来一个灰色文字</p>
</body>
</html>
02动态DOM
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
window.onload=function(){
document.body.innerHTML="<input type='button' value='按钮'/><input type='button' value='按钮'/><input type='button' value='按钮'/>";
var oBtn = document.getElementsByTagName('input');
// var oBtn = document.getElementById('btn') 这样不行
oBtn[0].onclick=function(){
alert('表单元素共有:'+oBtn.length+"个")
}
}
</script>
</head>
<body>
</body>
</html>
03getElementByName举例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
window.onload=function(){
// 单选框
var oInput = document.getElementsByName("status");
oInput[2].checked=true; //设定选中
// 复选框
var oCheckbox = document.getElementsByName('music');
// oCheckbox[4].checked=true;
//通过for循环遍历,全选
for (var i=0;i<oCheckbox.length;i++){
oCheckbox[i].checked=true;
}
}
</script>
</head>
<body>
<form action="" method="post">
你的最高学历:
<label ><input type="radio" name="status" value="本科"/>硕士</label>
<label ><input type="radio" name="status" value="硕士"/>硕士</label>
<label ><input type="radio" name="status" value="博士"/>博士</label>
<br>
你喜欢的音乐类型:
<label ><input type="checkbox" name="music" value="pop"/>pop</label>
<label ><input type="checkbox" name="music" value="blue"/>blue</label>
<label ><input type="checkbox" name="music" value="metal"/>metal</label>
<label ><input type="checkbox" name="music" value="classcal"/>classcal</label>
<label ><input type="checkbox" name="music" value="darkwave"/>darkwave</label>
<label ><input type="checkbox" name="music" value="postrock"/>postrock</label>
</form>
</body>
</html>
04title和body举例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
window.onload=function(){
document.title='梦想是什么?';
document.body.innerHTML="<strong style='color:darkred'>梦想就是一种让你感到坚持就是胜利的东西</strong>";
}
</script>
</head>
<body>
</body>
</html>
05创建元素
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
table{border-collapse: collapse;}
tr,td{
width: 80px;
height: 1.25rem;
border: 1px solid darkslategray;
}
</style>
<script type="text/javascript">
window.onload=function(){
//动态创建一个元素,并插入到已有元素中
var oDiv=document.getElementById("content");
var oStrong=document.createElement('strong');
var oTxt=document.createTextNode('我爱自学网');
oStrong.appendChild(oTxt);
oDiv.append(oStrong);
// 创建复杂的带属性的元素
var oInput=document.createElement('input');
oInput.id="submit";
oInput.type="button";
oInput.value="提交";
document.body.appendChild(oInput);
// 动态创建图片
var oImg=document.createElement('img');
oImg.className='pic';//注意设置元素的class必须使用className,class是js的保留字
oImg.src="img/1112.jpg";
oImg.style.border="1px solid silver";
document.body.appendChild(oImg);
// 创建对个元素
var oTable=document.createElement('table');
for (var i=0;i<3;i++){
var oTr=document.createElement('tr');
for (var j=0;j<3;j++){
var oTd=document.createElement('td');
txt=document.createTextNode("第"+(i+1)+"行"+"第"+(j+1)+"列")
oTd.append(txt)
oTr.appendChild(oTd);
}oTable.append(oTr)
}
//添加到body中
document.body.append(oTable)
}
</script>
</head>
<body>
<div id="content">
</div>
</body>
</html>
06插入元素
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
window.onload=function(){
var oBtn=document.getElementById('btn');
//为按钮添加事件
/*oBtn.onclick=function(){
var oUl=document.getElementById('list');
var oTxt=document.getElementById('txt')
//将文本框的内容转换为节点
var textNode=document.createTextNode(oTxt.value);
//创建一个li元素
var oLi=document.createElement("li");
oLi.appendChild(textNode);
oUl.append(oLi);
}*/
oBtn.onclick=function(){
var oUl=document.getElementById('list');
var oTxt=document.getElementById('txt')
//将文本框的内容转换为节点
var textNode=document.createTextNode(oTxt.value);
//创建一个li元素
var oLi=document.createElement("li");
oLi.appendChild(textNode);
oUl.insertBefore(oLi,oUl.firstElementChild)
}
}
</script>
</head>
<body>
<ul id="list">
<li>html</li>
<li>css</li>
<li>javascript</li>
</ul>
<input type="text" name="" id="txt" value="" />
<input type="button" name="" id="btn" value="插入" />
</body>
</html>
07删除元素
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
window.onload=function(){
var oBtn=document.getElementById('btn');
oBtn.onclick=function(){
var oUl=document.getElementById('list');
//删除最后一个子元素
// oUl.removeChild(oUl.lastElementChild);
// 删除整个列表
document.body.remove(oUl);
}
}
</script>
</head>
<body>
<ul id="list">
<li>html</li>
<li>css</li>
<li>javascript</li>
<li>JQuery</li>
<li>BootStrap</li>
</ul>
<input type="button" name="" id="btn" value="删除" />
</body>
</html>
08复制元素
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
window.onload=function(){
var oBtn=document.getElementById('btn');
oBtn.onclick=function(){
var oUl=document.getElementById("list");
document.body.appendChild(oUl.cloneNode(1));
}
}
</script>
</head>
<body>
<ul id='list'>
<li>html</li>
<li>css</li>
<li>javascript</li>
</ul>
<input type="button" name="" id="btn" value="复制" />
</body>
</html>
09替换元素
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">
window.onload=function(){
var oBtn=document.getElementById('btn');
oBtn.onclick=function(){
//获取body中的第一个元素
var oFirst=document.querySelector('body *:first-child');
//获取两个文本框
var oTag=document.getElementById('tag');
var oTxt=document.getElementById('txt');
//根据两个文本框的值来创建一个新节点
var oNewTag=document.createElement(oTag.value);
var oNewTxt=document.createTextNode(oTxt.value);
oNewTag.append(oNewTxt);
document.body.replaceChild(oNewTag,oFirst);
}
}
</script>
</head>
<body>
<p>JavaScript
</p>
<hr >
输入标签:<input type="text" name="" id="tag" value="" /><br>
输入内容:<input type="text" name="" id="txt" value="" />
<input type="button" id='btn' value='替换' />
</body>
</html>