JavaScript--DOM

1.DOM概念

1.1什么是DOM

对于JavaScript,为了能够使JavaScript操作Html,JavaScript就有了一套自己的dom编程接口。
对于Html,dom使得html形成一棵dom树,类似于一颗家族树一样,一层接一层,子子孙孙。

在这里插入图片描述

1.2什么是DOM树

HTML中的每个标签元素,属性,文本都能看做是一个DOM的节点,这些dom节点构成了一个树形结构
DOM树

  • W3C规定的三类DOM标准接口
  • Core DOM(核心DOM),适用于各种结构化文档
  • XML DOM 专用于XML文档
  • HTML DOM,专用于HTML文档
  • 选用DOM标准接口,结合支持的编程语言访问DOM树,如Java、-JavaScript、C#等

1.3总结

dom操作有用原生js的dom操作,也可以用对js封装过的jquery等插件来更加方便的进行dom操作

2.Core DOM的操作

2.1查看节点

2.1.1 访问指定节点的方法

  • getElementById( ) :返回一个节点对象
  • getElementsByName( ):返回多个(节点数组)
  • getElementsByTagName( ) :返回多个(节点数组)

2.1.2 查看/修改属性节点

  • getAttribute(“属性名”)

  • setAttribute(“属性名”,“属性值”)

  • 根据层次关系查找节点
    parentNode
    firstChild
    lastChild

直接上代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>获取属性</title>
	</head>
	<body>
		<input type="text" name="na" id="da" class="ca" />
		<br>
		<hr>
		<button type="button" onclick="fa()">获取input标签的属性值</button>
		<button type="button" onclick="fb()">修改input标签的属性值</button>
		<hr>
		<div id="">
			<!-- 要获取 span的父标签 -->
			<span id="da">1</span>
			<span id="da">1</span>
			<span id="da">1</span>
			<span id="da">1</span>
			<span id="da">1</span>
		</div>
	</body>
	<script type="text/javascript">
		function fa() {
			// 获取 input标签
			var da = document.getElementById("da");
			// 获取 id属性值
			var id = da.getAttribute("id");
			// 获取 name属性值
			var name = da.getAttribute("name");
			// 获取 class属性值
			var ca = da.getAttribute("class");
			// 获取 value属性值
			var value = da.value;
			// 获取 type属性值
			var tp = da.getAttribute("type");

			console.info("id = " + id)
			console.info("name = " + name)
			console.info("class = " + ca)
			console.info("value = " + value)
			console.info("type = " + tp)
		}

		function fb() {
			// 获取 input标签
			var da = document.getElementById("da");
			console.info("da = " + da)
			var sb = document.getElementById("sb");
			console.info("sb = " + sb)
			// 修改id type name class属性
			da.setAttribute("id", "sb");
			da.setAttribute("type", "button");
			da.setAttribute("name", "sn");
			da.setAttribute("class", "sc");
			da.setAttribute("value", "按钮");
		}
	</script>
</html>

2.2创建和增加节点

2.2.1创建和增加节点的方法

  • createElement():创建节点
  • appendChild():末尾追加方式插入节点
  • insertBefore():在指定节点前插入新节点
  • cloneNode():克隆节点

2.2.2创建和增加节点

//创建和增加节点
<body>
		<img id="da" border="8px" src="img/logo1.png" width="300px"  height="300px">
		<hr >
		<button type="button" onclick="zjiatup()">增加图片</button>
		<button type="button" onclick="fa()">复制图片</button>
	</body>
	<script type="text/javascript">
		function zjiatup(){
			//动态创建一个img标签用来存放图片
			var newImg=document.createElement("img");
			//给新建的img标签newImg添加src属性
			newImg.setAttribute("src","img/logo2.png");
			//获取原先的图片
			var da=document.getElementById("da");
			//将newImg插入到da的前面
			document.body.insertBefore(newImg,da);
		}
		
		function fa(){
			//获取要复制的图片
			var da=document.getElementById("da");
			var newDa=da.cloneNode(false);//克隆da参数:true表示把该标签里面的子标签也进行克隆;false,则不克隆子标签
			//将要克隆的新节点newDa追加到
			//将body子节点的末尾追加
			document.body.appendChild(newDa);
		}
	</script>

2.3删除和替换节点

2.3.1删除和替换节点的方法

removeChild():删除节点
replaceChild( ) :替换节点

2.3.2删除和替换节点

<body>
		<button type="button" onclick="fa()">替换图片</button>
		<button type="button" onclick="fb()">删除图片</button>
		<hr>
		<img id='da' border="8px" src="img/logo1.png" width="200px" height="200px" />
		<img id="db" border="8px" src="img/logo2.png" width="300px" height="300px">
	</body>
	<script type="text/javascript">
		function fa() {
			// 1.获取被替换的节点
			var da = document.getElementById("da");
			// 2.创建新节点,并设置节点的相关属性。
			var newImg = document.createElement("img");
			newImg.setAttribute("src", "img/黑头.gif");
			newImg.setAttribute("width", "200px");
			newImg.setAttribute("height", "200px");
			// 3.用新节点替换被替换的节点:newImg替换da
			document.body.replaceChild(newImg, da);
		}
		
		function fb(){
			//获取要删除的节点
			var db=document.getElementById("db");
			document.body.removeChild(db);
		}
	</script>

3.HTML DOM的特有对象和操作

HTML文档中的每个节点都是DOM对象,每类对象都有1套属性、方法。
最常用的是

表格和各类表单元素对象
在这里插入图片描述

3.1HTML DOM对象 的属性访问

不再使用setAttribute()/ getAttribute()方法
简化为对象名.属性值进行读取或修改

function change(){
  var imgs=document.getElementById("s1");
  imgs.src="images/grape.jpg";
}
function show(){
  var hText=document.getElementById("s1").alt;
  alert("图片的alt是:"+hText)
}

3.2HTML DOM对象-table对象

1、使用Core DOM标准操作获取表格对象
2、使用HTML DOM的table相关对象的属性、方法、事件操作表格
在这里插入图片描述

3.3表格相关对象

3.3.1table表格对象

属性:

  • rows //返回包含表格中所有行的一个数组

方法:

  • insertRow() //在表格中插入一个新行
  • deleteRow() //从表格中删除一行
//用法示例代码 
tableObject.rows[ ]
 tableObject.insertRow(index)
deleteRow(index)

3.3.2tableRow表格行对象

属性:

  • cells //返回包含行中所有单元格的一个数组
  • rowIndex //返回该行在表中的位置

方法:

  • insertCell() //在一行中的指定位置插入一个空的标签
  • deleteCell() //删除行中指定的单元格
//用法示例 
tableRowObject.insertCell(index);
tableRowObject.deleteRow(index);

3.3.3tableCell单元格对象

属性:

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

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

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

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

//用法示例
cell2.innerHTML=“改变单元格的HTML内容";
cell2.align="center";

3.4用table对象实现表格

//先写一个
		<input id="d1" type="button" value="增加一行" onclick="addRow()"/>
		<input id="b2" type="button" value="删除第二行" onclick="delRow()" />
		<input id="b3" type="button" value="修改标题样式" onclick="updateRow()"/>
		<input id="b4" type="button" value="复制最后一行" onclick="copyRow()"/>
	</body>
	<script type="text/javascript">
	//增加一行
	// 增加一个行对象,然后插入单元格,最后设置单元格 内容
		function addRow(){
			var sa=document.getElementById("myTable");//获取要操作的表格
			var sb=sa.insertRow(3);//插入(根据下标来确定位置)
			var sc=sb.insertCell(0);//插入第一个单元格(根据下标来确定位置)
				sc.innerHTML="我就是我, 不一样的我";//设置第一个单元格的内容
				var sd=sb.insertCell(1);//插入第二个单元格(根据下标来确定位置)
				sd.innerHTML="88.8";//设置第二个单元格的内容
				sd.align="center";//设置第二个单元格内容居中
			}
			
				// 修改标题样式
				// 使用class样式属性直接修改标题样式
			function updateRow(){//修改标题样式方法
				var sa=document.getElementById("row1");//获取第一行
				sa.className="title";//把样式表title赋给sa
				}
			
			//删除第二行
			function delRow(){
			    var sa=document.getElementById("myTable");
				sa.deleteRow(2);
				}
				
				// 复制最后一行
			function copyRow(){
				var sa=document.getElementById("row3");//访问要复制的行
				var sb=sa.cloneNode(true);//复制执行的行及子节点
				document.getElementById("myTable").appendChild(sb);//在指定节点的末尾添加行
			}
	</script>

3.5订单的删除和增加与修改

  • 使用insertRow()插入行

实现思路和关键代码:

//使用集合rows和属性length计算当前表格中的行数
 var addTable=document.getElementById("order");
 var row_index=addTable.rows.length-1;//索引从0开始,所以总长度-1

//使用tableRow对象插入新行时,设置行id属性,方便后续删除
//插入ID号,产生效果为:<tr id=“row1”>,方便后续传递行号参数给删除函数delRow(rowId)
newRow.id="row"+row_index;

实现思路 :

  • “修改”按钮函数editRow()、 “确定”按钮函数upRow(),两个函数传递的参数都是当前行的id号
  • 函数editRow():使用lastChild访问最后一个单元格中的“修改”按钮,并改变value值为“确定”
  • 函数upRow():使用firstChild和value获取当前数量值, 同样改变按钮上显示的文本和调用的函数

以下就是订单的删除和增加与修改的所有代码:

		<style type="text/css">
			body {
				font-size: 13px;
				line-height: 25px;
			}
			table {
				border-top: 1px solid #333;
				border-left: 1px solid #333;
				width: 400px;
			}
			td {
				border-right: 1px solid #333;
				border-bottom: 1px solid #333;
				text-align: center;
			}
			.title {
				font-weight: bold;
				background-color: #cccccc;
			}
			input text {
				width: 100px;
			}
		</style>
		<script type="text/javascript">
			//增加
			function addRow() {
				var sa = document.getElementById("order"); //获取表格
				var sum = sa.rows.length - 1; //获取总行数,不包括最后按钮一行
				var sb = sa.insertRow(sum); //在表格最后位置插入一行
				sb.id = "row" + sum; //给插入的行取一个id
				
				var ca = sb.insertCell(0); //插入第0列
				ca.innerHTML = "<input type='text'>";
				var cb = sb.insertCell(1); //插入第0列
				cb.innerHTML = "<input type='text' style='width:20px'>";
				var cc = sb.insertCell(2); //插入第0列
				cc.innerHTML = "<input type='text' style='width:20px'>";
				var cd = sb.insertCell(3); //插入第0列
				cd.innerHTML = "<input type='button' value='删除' οnclick=\"delRow('" + sb.id +
					"')\"> <input type='button' value='确定' οnclick=\"qdRow('" + sb.id + "')\">";
			}
			//删除
			function delRow(rid) {
				var va = document.getElementById("order"); //根据id获取表格对象
				var sa = document.getElementById(rid); //根据id获取你要删除的行对象
				var index = sa.rowIndex; //根据sa找到该行对象对应的下标
				va.deleteRow(index); //开始删除行
			}
			//确定
			function qdRow(rid) {
				var sa = document.getElementById(rid); //根据id获取你要确定的行
				var sum = sa.cells; //获取该行所有列(文本框)的集合
				//alert(sum.length);
				//alert(sum[0].lastChild.value);
				var ca = sum[0].lastChild.value;
				sum[0].innerHTML = ca;
				var cb = sum[1].lastChild.value;
				sum[1].innerHTML = cb;
				var cc = sum[2].lastChild.value;
				sum[2].innerHTML = cc;

				sum[3].lastChild.value = "修改";
				sum[3].lastChild.setAttribute("onclick", "editRow('" + rid + "')");
			}
			//修改
			function editRow(rid) {
				var sa = document.getElementById(rid);
				var sum = sa.cells;

				var ca = sum[0].innerHTML;
				sum[0].innerHTML = "<input type='text' value='" + ca + "'>";
				var cb = sum[1].innerHTML;
				sum[1].innerHTML = "<input type='text' style='width:20px' value='" + cb + "'>";
				var cc = sum[2].innerHTML;
				sum[2].innerHTML = "<input type='text' style='width:20px' value='" + cc + "'>";

				sum[3].lastChild.value = '确定';
				sum[3].lastChild.setAttribute("onclick", "qdRow('" + rid + "')");
			}
		</script>
	</head>

	<body>
		<table border="0" cellspacing="0" cellpadding="0" id="order">
			<tr class="title">
				<td>商品名称</td>
				<td>数量</td>
				<td>价格</td>
				<td>操作</td>
			</tr>
			<tr id="row1">
				<td>防滑真皮休闲鞋</td>
				<td>12</td>
				<td>&yen;568.50</td>
				<td><input name="rowdel" type="button" value="删除" onclick='delRow("row1")' />
					<input name="edit" type="button" value="修改" onclick='editRow("row1")' />
				</td>
			</tr>
			<tr>
				<td colspan="4" style="height:30px;">
					<input name="addOrder" type="button" value="增加订单" onclick="addRow()" />
				</td>
			</tr>
		</table>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值