JavaScript之DOM节点操作

   一、DOM(document object model文档对象模型) 

   1.1 概述
       用来将标记型文档封装成对象,并将标记型文档中的所有的内容(标签、文本、属性等)都封装成对象。

    1.2 目的
        为了更为方便的操作这些文档以及文档中的所有内容;因为对象的出现就可以有属性和行为被调用。

    1.3 文档对象模型
       文档:标记型文档(html,xml)
       对象:封装了属性和行为的实例,可以直接被调用
       模型:所有标记型文档都具备一些共性的特征的一个体现
       标记型文档:标签、属性、标签中封装的数据

注意:只要是标记型文档,DOM这种技术都可以对其进行操作。

    1.4 DOM这种技术是如何对标记型文档进行操作呢?
         DOM技术的解析方式:将标记型文档解析一颗DOM树,并将树种的内容都封装成节点对象。

    【解析过程】根据html的层级结构,在内存中分配一个树形结构,需要把html中的每部分封装成对象,如下:
         ①document对象:整个文档
         ②element对象:标签对象
         ③属性对象
         ④文本对象

    
    【注意】Node对象:此对象是以上对象的父对象,如果在对象里面找不到想要的方法,此时,可到Node对象中找。


      1.5 JavaScriptDOM能做什么???
            JavaScript能够改变页面中的所有HTML元素
            JavaScript能够改变页面中的所有HTML属性
            JavaScript能够改变页面中的所有CSS样式

全选案例:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<!-- js -->
	<script type="text/javascript">
		//封装ID获取
		function $(id){
			return document.getElementById(id);
		}
		//编写myAll点击事件函数
		function myAll(){
			//拿到全选框按钮的checked值即可
			//拿到全选框
			var alls =$('alls' );
			// console.log(alls.checked);
			//获取其他三个复选框
			var cks = document.getElementsByName("cks");
			//遍历结果集
			for(var i = 0;i<cks.length;i++){
				// cks[i]  每一个复选框对象
				cks[i].checked = alls.checked;
			}
		}

		//优化全选
		//单独为每一个子复选框设置点击事件,当触发任意一个时,都要全盘判断是否没有选中的,但凡有一个没有选中,全选就取消
		window.onload = function(){
			//获取所有name为cks的复选框
			var cks = document.getElementsByName("cks");
			//遍历
			for(var i = 0;i<cks.length;i++){
				//为每一个子复选框设置对应的点击事件
				cks[i].onclick = function(){
					//alert(this.value);
					//判断当前的子复选框是否选中了并且一并判断后面的是否选中
					var flag = true;//假设全部选中
					for(var j = 0;j<cks.length;j++){
						//判断只要有一个没有选中,全选就干掉。
						if(cks[j].checked == false){
							flag = false;
							break;
						}
					}
					$("alls").checked = flag;
				};
			}

		};

	</script>
</head>
<body>
	<h3>全选案例</h3>
	<table border="1" width="40%">
		<tr>
			<td>全选|全不选<input id="alls" onclick="myAll();" type="checkbox"></td>
			<td>编号</td>
			<td>姓名</td>
			<td>性别</td>
			<td>年龄</td>
		</tr>
		<tr>
			<td><input type="checkbox" name = "cks" value = "one"></td>
			<td>1</td>
			<td>nuonuo</td>
			<td>男</td>
			<td>18</td>
		</tr>
			<tr>
			<td><input type="checkbox" name = "cks" value = "two"></td>
			<td>1</td>
			<td>nuonuo</td>
			<td>男</td>
			<td>18</td>
		</tr>
			<tr>
			<td><input type="checkbox" name = "cks" value = "three"></td>
			<td>1</td>
			<td>nuonuo</td>
			<td>男</td>
			<td>18</td>
		</tr>

	</table>
</body>
</html>

二、 element对象

    2.1 getAttribute('属性名称'):

                  获取属性里面的属性值


    2.2 setAttribute('属性名','属性值'):

                  设置属性的值


    2.3 removeAttribute('属性名'):

                    删除属性

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>DOM编程之节点操作</title>
	<style type="text/css">
		.oBox{
			background-color: yellow;
		}

	</style>
	<script type="text/javascript">
		//加载函数
		window.onload = function(){
			//获取obtn1按钮
			var oBtn1 = document.getElementById("oBtn1");
			oBtn1.onclick = function(){
				//根据选择器获取元素(HTML5.0新增)
				var oImg = document.querySelector('.oImg');
				console.log(oImg);
				//获取属性
				var result = oImg.getAttribute("src");
				alert(result);//相对路径
				//通过标签本身只调用属性即可获取值
				console.log(oImg.src);//绝对路径
			};

			//获取oBtn2按钮
			var oBtn2 = document.getElementById("oBtn2");
			oBtn2.onclick = function(){
				//获取超链接
				var oA = document.querySelector(".oA");
				oA.setAttribute("href","http://www.4399.com");
				//innerHTML 该属性是设置或获取标签的内容
				oA.innerHTML = "4399小游戏官网";
			};


			//获取oBtn3按钮
			var oBtn3 = document.getElementById("oBtn3");
			oBtn3.onclick = function(){
				//获取超链接
				var oBox = document.querySelector(".oBox");
				oBox.removeAttribute("class");
			};
		};



	</script>
</head>
<body>
	<h2>关于DOM中的节点获取:节点获取时根据属性获取值</h2>
	<h3>1.getAttribute();获取标签属性的值</h3>
	<img class="oImg" src="img/1.png" alt="" width="200" height="200">
	<button id="oBtn1">点击获取img中的src属性</button>
	<hr>
	<h3>2.setAttribute();重新设置值</h3>
	<a class="oA" href="http://www.baidu.com">百度一下</a>
	<button id="oBtn2">点击设置href属性</button>

	<h3>3.移除属性值removeAttribute</h3>
	<div class="oBox" style = "width: 100px;height: 100px;border: 1px solid red">

	</div>
	<button id="oBtn3">点击移除</button>
</body>
</html>

三、 Node对象
          根据层次关系查找节点
    parentNode  

              父节点


    firstChild  

              第一个子节点  (得到所有的子节点:childNodes,兼容性差)


    lastChild  

              最后一个子节点


    nextSibling

               返回一个给定节点的下一个兄弟节点


    previousSibling

                返回一个给定节点的上一个兄弟节点

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script type="text/javascript">
		//加载函数
		window.onload = function(){
			//obtn1
			var obtn1 = document.getElementById("obtn1");
			//设置点击事件
			obtn1.onclick = function(){
				  var oUl = document.getElementById("oUl");
				//获取第一个节点(标签)中的内容,去掉空格
				   console.log(oUl.firstChild.innerHTML);
				//设置样式
				   oUl.firstChild.style.border = "1px solid red";
				
				//筛选掉空格(文本节点) firstElementChild
				  console.log(oUl.firstElementChild.innerHTML);
				
				//获取最后一个子节点
				  console.log(oUl.lastChild.innerHTML);
				  console.log(oUl.lastElementChild.innerHTML);
				
				//根据父标签获取所有的子节点(li)
				 console.log(oUl.childNodes.length);//包含空格
				console.log(oUl.children.length);//不包含空格

				//根据指定的子节点获取父节点
				// oUl.firstElementChild 根据父节点获取第一个子节点
				// oUl.firstElementChild.parentNode 通过得到的第一个子节点获取父节点
				  oUl.firstElementChild.parentNode.style.border = "1px solid red";


				//获取oUl中第三个子节点  设置边框
				
				  oUl.children[2].style.border = "1px solid red"
			};
		};

	</script>
</head>
<body>
	<h2>DOM操作中的层级式元素获取</h2>
	<ul id="oUl">
		<li>111111</li>
		<li>222222</li>
		<li>33333</li>
		<li>44444</li>
		<li>55555</li>
		<li>66666</li>
	</ul>
	
	<button id="obtn1">点击1</button>

</body>
</html>

四、 操作节点树(创建和添加节点)
    createElement('标签名称')

             创建节点


    createTextNode;

            创建文本节点


    appendChild():

            末尾追加方式插入节点


    insertBefore(newNode,oldNode):

              在指定节点前插入新节点(newNode:要插入的节点;oldNode:在谁之前插入)


    cloneNode(boolean):

               复制节点,参数是判断是否赋值子节点


    removeChild():

              删除节点(通过父节点删除,不能自己删除自己)


    replaceChild(newNode,oldNode):

             替换节点(newNode:替换成的节点;oldNode:被替换的节点)

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script type="text/javascript">
		//需求1:在ul列表中通过js脚本的方式创建一个li存储item6
		window.onload = function(){
			//oBtn1
			var oBtn1 = document.getElementById("oBtn1");
			oBtn1.onclick = function(){
				//li标签
				//createElement 创建标签
				var newLi = document.createElement("li");
				//创建一个属性给newLi标签
				var oid = document.createAttribute("id");
				//设置属性
				// console.log(typeof(oid));
				//设置属性
				newLi.setAttributeNode(oid);
				//设置id的属性值 在设置属性之后
				newLi.id = "123"
				//创建一段文本
				var text = document.createTextNode("item6");
				//将文本内容追加到li的末尾
				newLi.appendChild(text);
				//appendChild(); 向指定的标签末尾追加指定的节点(标签)
				//获取oUl
				var oUl = document.getElementById("oUl");
				//向末尾追加一个已创建的li
				oUl.appendChild(newLi);
			};

			var oBtn2 = document.getElementById("oBtn2");
			oBtn2.onclick = function(){
				//获取第一个子节点
				var firstLi = document.getElementById("oUl").firstElementChild;

				//创建一个新节点li
				var newLi = document.createElement("li");
				//创建新节点内容
				var text = document.createTextNode("我是新节点");
				//将内容追加到新节点的末尾
				newLi.appendChild(text);

				//调用插入的方法
				document.getElementById("oUl").insertBefore(newLi,firstLi);
			}


			var oBtn3 = document.getElementById("oBtn3");
			oBtn3.onclick = function(){
				//根据父节点获取第三个子节点
				var threeLi = document.getElementById("oUl").children[2];

				//创建一个p段落标签
				var oP = document.createElement("p");
				var oText = document.createTextNode("我是p段落");
				oP.appendChild(oText);
				//根据父标签替换 
				document.getElementById("oUl").replaceChild(oP,threeLi);
			}

			var oBtn4 = document.getElementById("oBtn4");
			oBtn4.onclick = function(){
				//根据父节点获取第4个子节点
				var threeLi = document.getElementById("oUl").children[3];
				// console.log(threeLi.cloneNode(true));
				//  true  全部复制(标签和内容)  false--复制标签不复制内容
				var newLi = threeLi.cloneNode(false);

				// document.getElementById("oUl")
				document.getElementById("oUl").appendChild(newLi);

			}

			var oBtn5 = document.getElementById("oBtn5");
			oBtn5.onclick = function(){
				var lastLi = document.getElementById("oUl").children[4];

				document.getElementById("oUl").removeChild(lastLi);
			}
		}
	</script>
</head>
<body>
	<!-- 节点创建功能 -->
	<ul id="oUl">
		<li>item1</li>
		<li>item2</li>
		<li>item3</li>
		<li>item4</li>
		<li>item5</li>
	</ul>
	
	<button id="oBtn1">创建元素</button>

	<button id="oBtn2">插入元素(insertBefore)</button>

	<button id="oBtn3">替换(repalceChild)</button>

	<button id="oBtn4">复制(克隆)cloneNode</button>

	<button id="oBtn5">删除节点(removeChild)</button>

	<hr>
	<select name="" id="" multiple="multiple" style="width: 100px;height: 200px;">
		<option value="">1111</option>
		<option value="">1111</option>
		<option value="">1111</option>
		<option value="">1111</option>
		<option value="">1111</option>
		<option value="">1111</option>
		<option value="">1111</option>
	</select>
	<select name="" id="" multiple="multiple" style="width: 100px;height: 200px;">		
	</select>

</body>
</html>

五、表格相关对象 
  1.  table表格对象
             属性:row[]  返回包含表格中所有行的一个数组
             方法:
                 insertRow()

                        从表格中插入一个新行


                 deleteRow()

                         从表格中删除一行


  2.  tableRow表格行对象
         属性:
                  cells():

                      返回包含行中所有单元格的一个数组


                  rowIndex:

                      返回该行在表中的位置


         方法:
                   insertCell():

                      在一行中的指定位置插入一个空的<td>标签


                   deleteCell():

                       删除行中指定的单元格

                   tableCell

                         单元格行对象    

                   cellIndex    

                         返回单元格在某行单元格集合中的位置


                   innerHTML  

                        设置或返回单元格的开始标签和结束标签之间的HTML


                   align    

                        设置或返回单元格内部数据的水平排列方式


                    className    设置或返回元素的class属性


 

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style type="text/css">
		.title{
			background-color: orange;
			text-align: center;
			font-weight: bold;
		}
		
	</style>
	<script type="text/javascript">
		/*
			table对象中的属性
				1.rows  求table标签中的行标签行数
				2.insertRow(index); 插入新航
				3.removeRow(index);移除行
		 */ 

		window.onload = function(){
			var oBtn = document.getElementById("oBtn1");
			oBtn.onclick = function(){
				//需求:在表格的末尾插入一个tr标签
				//获取表格对象
				var oTab = document.getElementById("oTab");
				//获取表格的长度
				var length = oTab.rows.length;
				//alert(length);
				//插入tr
				var oTr = oTab.insertRow(length);
				//1
				var oTd1 = oTr.insertCell(0);
				oTd1.innerHTML = "1";
				//2
				var oTd2 = oTr.insertCell(1);
				oTd2.innerHTML = "兰博基尼";
				//3
				var oTd3 = oTr.insertCell(2);
				oTd3.innerHTML = "10000";
			};

			var oBtn2 = document.getElementById("oBtn2");
			oBtn2.onclick = function(){
				//获取表格对象
				var oTab = document.getElementById("oTab");
				//获取表格的长度
				var length = oTab.rows.length;
				oTab.deleteRow(length-1);
			};

			var oBtn3 = document.getElementById("oBtn3");
			oBtn3.onclick = function(){
				//className  获取指定的标签后可以通过className属性设置样式(来源与style中的选择器设置的)
				//获取表格对象
				var oTab = document.getElementById("oTab");
				//获取第一行
				var firstTr = oTab.rows[0];
				firstTr.className = "title";
				// console.log(oTab.rows[0]);
			};
		};

	</script>
</head>
<body>
	<table id="oTab" border="1" width="50%" cellpadding="0" cellspacing="0">
		<tr>
			<td>编号</td>
			<td>商品名称</td>
			<td>价格</td>
		</tr>
	</table>

	<br><br><br>
		<button id="oBtn1">点击新增行</button>
			<button id="oBtn2">移除最后一行</button>

			<button id="oBtn3">更新表头</button>
</body>
</html>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ning_ning_03

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值