JS--JavaScript访问节点(childNodes、parentNode、firstChild、lastChild、nextSibling、previousSibling)

访问节点

通过节点之间的树形关系,可以定位文档中的每个节点。DOM为Node类型定义如下属性,以方便JavaScript对文档树中每个节点进行遍历。

  • ownerDocument:返回当前节点的根元素(document对象)
  • parentNode:返回当前节点的父节点。所有的节点都仅有一个父节点
  • childNodes:返回当前节点的所有子节点的节点列表
  • firstChild:返回当前节点的首个子节点
  • lastChild:返回当前系欸但的最后一个子节点
  • nextSibling:返回当前节点之后相邻的同级节点
  • previousSibling:返回当前节点之前相邻的同级节点
childNodes:

每个节点都有一个childNodes属性,该属性保存着一个nnodeList对象,它表示了所有子节点的列表。

nodeList是一种类数组对象,用于保存一组有序的节点,用户可以通过下标位置来访问这些节点。虽然childNodes可以通过方括号来访问nodeList的值,而且childNodes对象包含一个length属性,它表示列表包含子节点的个数(长度),但childNodes并不是数组,不能够直接调动数组的方法。

nodeList对象实际上是基于DOM结构动态执行查询的结构,DOM结构的变化能够自动反映在nodeList对象中。因此,我们不能够以静态的方式处理nodeList对象。

示例:通过方括号,item()方法访问节点

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<h1>标准BOM</h1>
		<p>这是一份简单的<strong>文档对象模型</strong></p>
		<ul>
			<li>D表示文档,HTML文档结构</li>
			<li>O表示对象,文档结构的JavaScript脚本化映射</li>
			<li>M表示模型,脚本与结构交互的方法和行为</li>
		</ul>
		<script>
			var tag = document.getElementsByTagName("ul")[0]; //获取列表元素
			var a = tag.childNodes; //获取列表元素包含的所有节点
			console.log(a[0].nodeType); //第一个节点类型,返回3,文本节点
			console.log(a.item(1).innerHTML); //返回第二个li包含的文本
			console.log(a.length); //包含的子节点数 3
		</script>
	</body>
</html>

提示:可以使用Array.prototype.slice()方法(IE8以后)把nodeList转换为数组,这样能够调用数组的相关方法。

var tag = document.getElementsByTagName("ul")[0]; //获取列表元素
var a = Array.prototype.slice.call(tag.childNodes, 0);//转换为数组
a.reverse();//逆序
parentNode

每个节点都有一个parentNode属性,该属性指向文档树种的父节点。包含在childNodes列表中的所有节点都具有相同的父节点,因此它们的parentNode属性都指向同一个节点。

parentNode属性返回节点永远是一个元素类型节点,因为只有元素节点才可能包含子节点。不过document节点没有父节点,document节点的parentNode属性将返回null。

firstChild和lastChild

firstChild属性返回第一个子节点,lastChild返回最后一个子节点。文本节点和属性节点的firstChild和lastChild属性返回值总是null

注意:firstChild等价于childNodes的第1个元素,lastChild等价于childNodes的最后一个元素。

node.childNodes[0] = node.firstChild
node.childNodes[node.childNodes.length - 1] = node.lastChild
nextSibling和previousSibling

nextSibling返回下一个相邻节点,previousSibling返回上一个相邻节点。如果没有同属一个父节点的相邻节点,则它们将返回null。

ownerDocument

在DOM文档树种,可以使用ownerDocument属性访问根节点

node.ownerDocument

通过每个节点的ownerDocument属性,可以不必通过层层回溯的方式到达顶端,而是可以直接访问文档节点。另外,也可以使用如下方式访问根节点:

document.documentElement

上述反应节点关系的所有属性都是只读的,其中childNodes属性于其他属性相比更加方便,因为只须使用简单的关系指针,就可以通过它访问文档树种的任何节点。

另外,**hasChildNodes()方法可以检测是否包含子节点,返回true | false,比查询childNodes列表的length属性更简单、有效。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值