JavaScript(十五)DOM

DOM是什么

DOM 的全称为 Document Object Model,译为文档对象模型。DOM 规定了浏览器应该如何创建 HTML 页面,以及 JavaScript 如何访问修改浏览器窗口中的 Web 页面的内容。

1. W3C 对 DOM 的定义

DOM 是一个独立于任何语言和平台的接口,允许任何语言或脚本动态地访问和更新 HTML 文档的内容、结构和样式。该 HTML 页面可以进一步处理,并且该处理的结果可以被合并到所呈现的 HTML 页面中。

2. 详解 DOM

DOM 中每一个字母的含义如下:

  • D 表示 Document,即将一个 HTML 页面表示为一个文档。
  • O 表示 Object,即将一个 HTML 页面中的每一个部分转换成一个对象

    DOM 实际上是以面向对象方式来描述一个 HTML 页面。其中 Document 对象主要处理 HTML 页面内容。

  • M 表示 Model,即通过模型来表示对象之间的关系,方便获取对象。

    DOM 将一个 HTML 页面表示为一个树形结构的模型。(关于树形结构会在后面学习)

3. DOM 的组成

  • DOM Core: 指定类属类型,将带有标记的文档看成树状结构并据此对文档进行相关操作。
  • DOM HTML: 提供用于操作 HTML 文档以及类似于 JavaScript 对象模型语法的功能部件,在核心 DOM 的基础上支持对所有 HTML 元素对象进行操作。
  • DOM CSS: 提供脚本编程实现 CSS 的接口。
  • DOM XML

4. DOM 树结构

当浏览器加载 HTML 页面时,会创建这个 HTML 页面的模型。这个模型就叫做 DOM 树结构,会被保存到浏览器的内存中。

4.1节点

节点(node)是个网络术语,表示网络中的连接点。一个网络是由一些节点构成的集合。在 DOM 树结构中主要由以下 4 种节点组成:

  • 文档节点: 表示整个 HTML 页面(相当于 document 对象)。当需要访问任何标签、属性或文本时,都可以通过文档节点进行导航。
  • 元素节点: 表示 HTML 页面中的标签(即 HTML 页面的结构)。当访问 DOM 树时,需要从查找元素节点(标签)开始。
  • 文本节点: 表示 HTML 页面中的标签所包含的文本内容。
  • 属性节点: 表示 HTML 页面中的开始标签包含的属性。

根据节点的分类,上面的 DOM 树结构就可以更详细的表示为如下示例:

 

4.2判断节点类型

当通过 DOM 节点树获取 HTML 页面的节点时,我们如何可以判断出当前节点是哪种类型呢?我们可以通过如下 3 个属性进行判断:

 nodeNamenodeTypenodeValue
文档节点#document9null
元素节点标签名1null
属性节点属性名2属性值
文本节点#text3文本内容
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>判断节点类型</title>
		<link rel="stylesheet" href="css/style.css" />
		<style>
			body {
				padding-top: 50px;
				padding-left: 50px;
			}
		</style>
	</head>
	<body>
		<div id="container" class="container">
			<div class="col-md-6">
				<h3>判断文档节点</h3>
				<button id="dname" class="btn btn-primary">nodeName</button>
				<button id="dtype" class="btn btn-primary">nodeType</button>
				<button id="dvalue" class="btn btn-primary">nodeValue</button>
				<h3>判断元素节点</h3>
				<button id="ename" class="btn btn-primary">nodeName</button>
				<button id="etype" class="btn btn-primary">nodeType</button>
				<button id="evalue" class="btn btn-primary">nodeValue</button>
				<h3>判断属性节点</h3>
				<button id="aname" class="btn btn-primary">nodeName</button>
				<button id="atype" class="btn btn-primary">nodeType</button>
				<button id="avalue" class="btn btn-primary">nodeValue</button>
				<h3>判断文本节点</h3>
				<button id="tname" class="btn btn-primary">nodeName</button>
				<button id="ttype" class="btn btn-primary">nodeType</button>
				<button id="tvalue" class="btn btn-primary">nodeValue</button>
			</div>
			<div id="show" class="col-md-6" style="padding-top: 50px;"></div>
		</div>
		<script>
			var show = document.getElementById('show');
			var content = '';
			
			var dname = document.getElementById('dname');
			dname.onclick = function(){
				content += '<h5>文档节点的nodeName: ' + document.nodeName + '</h5>';
				show.innerHTML = content;
			}
			var dtype = document.getElementById('dtype');
			dtype.onclick = function(){
				content += '<h5>文档节点的nodeType: ' + document.nodeType + '</h5>';
				show.innerHTML = content;
			}
			var dvalue = document.getElementById('dvalue');
			dvalue.onclick = function(){
				content += '<h5>文档节点的nodeValue: ' + document.nodeValue + '</h5><br>';
				show.innerHTML = content;
			}
			
			var ename = document.getElementById('ename');
			ename.onclick = function(){
				content += '<h5>元素节点的nodeName: ' + ename.nodeName + '</h5>';
				show.innerHTML = content;
			}
			var etype = document.getElementById('etype');
			etype.onclick = function(){
				content += '<h5>元素节点的nodeType: ' + etype.nodeType + '</h5>';
				show.innerHTML = content;
			}
			var evalue = document.getElementById('evalue');
			evalue.onclick = function(){
				content += '<h5>元素节点的nodeValue: ' + evalue.nodeValue + '</h5><br>';
				show.innerHTML = content;
			}
			
			var aname = document.getElementById('aname');
			aname.onclick = function(){
				var attrNode = aname.getAttributeNode('id');
				content += '<h5>属性节点的nodeName: ' + attrNode.nodeName + '</h5>';
				show.innerHTML = content;
			}
			var atype = document.getElementById('atype');
			atype.onclick = function(){
				var attrNode = atype.getAttributeNode('id');
				content += '<h5>属性节点的nodeType: ' + attrNode.nodeType + '</h5>';
				show.innerHTML = content;
			}
			var avalue = document.getElementById('avalue');
			avalue.onclick = function(){
				var attrNode = avalue.getAttributeNode('id');
				content += '<h5>属性节点的nodeValue: ' + attrNode.nodeValue + '</h5><br>';
				show.innerHTML = content;
			}
			
			var tname = document.getElementById('tname');
			tname.onclick = function(){
				var textNode = tname.firstChild;
				content += '<h5>文本节点的nodeName: ' + textNode.nodeName + '</h5>';
				show.innerHTML = content;
			}
			var ttype = document.getElementById('ttype');
			ttype.onclick = function(){
				var textNode = ttype.firstChild;
				content += '<h5>文本节点的nodeType: ' + textNode.nodeType + '</h5>';
				show.innerHTML = content;
			}
			var tvalue = document.getElementById('tvalue');
			tvalue.onclick = function(){
				var textNode = tvalue.firstChild;
				content += '<h5>文本节点的nodeValue: ' + textNode.nodeValue + '</h5>';
				show.innerHTML = content;
			}
		</script>
	</body>
</html>

4.3节点关系

DOM 节点树的概念从上面的图示中可以一目了然。构成节点树结构的同时,节点与节点之间也存在着如下 3 种关系:

  • 祖先节点与后代节点的关系
  • 父节点与子节点的关系
  • 兄弟节点的关系(拥有共同的父节点)

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值