1.DOM概念
1.1什么是DOM
对于JavaScript,为了能够使JavaScript操作Html,JavaScript就有了一套自己的dom编程接口。
对于Html,dom使得html形成一棵dom树,类似于一颗家族树一样,一层接一层,子子孙孙。
1.2什么是DOM树
HTML中的每个标签元素,属性,文本都能看做是一个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>¥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>