Javascript基础-Html Dom

什么是HTML DOM

DOM作为JavaScript四大组成之一,它的作用是极其重要的。DOM全称为Document Object Model 及文档对象模型。我所介绍的是dom标准中的HTML DOM-针对HTML文档。HTML DOM是:

  • HTML的标准对象模型
  • HTML的标准编程接口
  • W3C标准

HTML DOM定义了所以的HTML元素的对象和属性,以及它们的访问方法。换句话说,HTML DOM就是关于如何获取、修改、添加、删除(增删改查)HTML元素的标准。

HTML DOM节点

根据W3C的HTML DOM标准,HTML文档中的所有内容都是节点:

  • 整个文档是一个文档节点
  • 每个HTML元素是元素节点
  • HTML元素内的文本是文本节点
  • 每个HTML属性是属性节点
  • 注释为注释节点

说到HTML DOM节点,HTML DOM Tree图很好地向我们展示HTML节点以及它们之间的关系。
html 节点树
通过该模型,开发者可以通过编程语言(JavaScript)访问各节点。节点树中的节点彼此拥有层级关系。父(parent)、子(child)和同胞(sibling)等术语用于描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。

HTML DOM方法

可通过 JavaScript (以及其他编程语言)对 HTML DOM 进行访问。
所有 HTML 元素被定义为对象,而编程接口则是对象方法和对象属性。

以下为dom一些常用的方法(参考w3c官方文档,具体使用不详细介绍):

方法描述
getElementById()返回带有指定 ID 的元素。
getElementsByTagName()返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)。
getElementsByClassName()返回包含带有指定类名的所有元素的节点列表。
appendChild()把新的子节点添加到指定节点。
removeChild()删除子节点。
replaceChild()替换子节点。
insertBefore()在指定的子节点前面插入新的子节点。
createAttribute()创建属性节点。
createElement()创建元素节点。
createTextNode()创建文本节点。
getAttribute()返回指定的属性值。
setAttribute()把指定属性设置或修改为指定的值。

实例

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Untitled Document</title>
		<style type="text/css">
			body {
				width: 800px;
				margin-left: auto;
				margin-right: auto;
			}
			button {
				width: 300px;
				margin-bottom: 10px;
			}
			
			#btnList {
				float:left;
			}
			#total{
				width: 450px;
				float:left;
			}
			
			ul{
				list-style-type: none;
				margin: 0px;
				padding: 0px;
			}
			
			.inner li{
				border-style: solid;
				border-width: 1px;
				padding: 5px;
				margin: 5px;
				background-color: #99ff99;
				float:left;
			}
			
			.inner{
				width:400px;
				border-style: solid;
				border-width: 1px;
				margin-bottom: 10px;
				padding: 10px;
				float: left;
			}
			
		</style>
		<script type="text/javascript">
		
			window.onload = function() {
				
				//创建一个"斗罗大陆"节点,添加到#animation下
				myClick("btn01",function(){
					//创建斗罗大陆节点 <li>斗罗大陆</li>
					//创建li元素节点
					/*
					 * document.createElement()
					 * 	可以用于创建一个元素节点对象,
					 * 	它需要一个标签名作为参数,将会根据该标签名创建元素节点对象,
					 * 	并将创建好的对象作为返回值返回
					 */
					var li = document.createElement("li");
					
					//创建斗罗大陆文本节点
					/*
					 * document.createTextNode()
					 * 	可以用来创建一个文本节点对象
					 *  需要一个文本内容作为参数,将会根据该内容创建文本节点,并将新的节点返回
					 */
					var dlText = document.createTextNode("斗罗大陆");
					
					//将dlText设置li的子节点
					/*
					 * appendChild()
					 * 	 - 向一个父节点中添加一个新的子节点
					 * 	 - 用法:父节点.appendChild(子节点);
					 */
					li.appendChild(dlText);
					
					//获取id为animation的节点
					var animation = document.getElementById("animation");
					
					//将斗罗大陆添加到animation下
				animation.appendChild(li);
					
					
				});
				
				//将"斗罗大陆"节点插入到#yw前面
				myClick("btn02",function(){
					//创建一个斗罗大陆
					var li = document.createElement("li");
					var dlText = document.createTextNode("斗罗大陆");
					li.appendChild(dlText);
					
					//获取id为yw的节点
					var yw = document.getElementById("yw");
					
					//获取animation
					var animation = document.getElementById("animation");
					
					/*
					 * insertBefore()
					 * 	- 可以在指定的子节点前插入新的子节点
					 *  - 语法:
					 * 		父节点.insertBefore(新节点,旧节点);
					 */
				animation.insertBefore(li , yw);
					
					
				});
				
				
				//使用"斗罗大陆"节点替换#yw节点
				myClick("btn03",function(){
					//创建一个斗罗大陆
					var li = document.createElement("li");
					var dlText = document.createTextNode("斗罗大陆");
					li.appendChild(dlText);
					
					//获取id为yw的节点
					var yw = document.getElementById("yw");
					
					//获取animation
					var animation = document.getElementById("animation");
					
					/*
					 * replaceChild()
					 * 	- 可以使用指定的子节点替换已有的子节点
					 * 	- 语法:父节点.replaceChild(新节点,旧节点);
					 */
					animation.replaceChild(li , yw);
					
					
				});
				
				//删除#yw节点
				myClick("btn04",function(){
					//获取id为yw的节点
					var yw = document.getElementById("yw");
					//获取aniamtion
					var animation = document.getElementById("animation");
					
					/*
					 * removeChild()
					 * 	- 可以删除一个子节点
					 * 	- 语法:父节点.removeChild(子节点);
					 * 		
					 * 		子节点.parentNode.removeChild(子节点);
					 */
	
					
				yw.parentNode.removeChild(yw);
				});
				
				
				//读取#animation内的HTML代码
				myClick("btn05",function(){
					//获取animation
					var animation = document.getElementById("animation");
					
					alert(animation.innerHTML);
				});
				
				//设置#yw内的HTML代码
				myClick("btn06" , function(){
					//获取yw
					var yw = document.getElementById("yw");
					yw.innerHTML = "斗破苍穹";
				});
				
				myClick("btn07",function(){
					
					//向animation中添加斗罗大陆
					var animation = document.getElementById("animation");
					
					/*
					 * 使用innerHTML也可以完成DOM的增删改的相关操作
					 * 一般我们会两种方式结合使用
					 */
				
					var li = document.createElement("li");
					//向li中设置文本
					li.innerHTML = "斗罗大陆";
					//将li添加到animation中
					animation.appendChild(li);
					
				});
				
				
			};
			
			function myClick(idStr, fun) {
				var btn = document.getElementById(idStr);
				btn.onclick = fun;
			}
			
		
		</script>
		
	</head>
	<body>
		<div id="total">
			<div class="inner">
				<p>
					你喜欢哪个动漫?
				</p>

				<ul id="animation">
					<li id="yw">妖尾</li>
					<li>火影</li>
					<li>柯南</li>
					<li>海贼王</li>
				</ul>
				
			</div>
		</div>
		<div id="btnList">
			<div><button id="btn01">创建一个"斗罗大陆"节点,添加到#animation下</button></div>
			<div><button id="btn02">"斗罗大陆"节点插入到#yw前面</button></div>
			<div><button id="btn03">使用"斗罗大陆"节点替换#yw节点</button></div>
			<div><button id="btn04">删除#yw节点</button></div>
			<div><button id="btn05">读取#animation内的HTML代码</button></div>
			<div><button id="btn06">设置#yw内的HTML代码</button></div>
			<div><button id="btn07">创建一个"斗罗大陆"节点,添加到#animation下</button></div>
		</div>
	</body>
</html>

总结

以上只是对DOM 的简单介绍,DOM 的存在可使我们精确的定位到网页元素,从而操作元素。DOM中还有许多方法和属性,具体请参考w3c离线手册或者去网上获取。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值