JavaScript DOM操作基础

/*
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>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值