暴打JavaScript语法之DOM基础二:Node类型的详细说明和操作节点的操作演示

2023-05-16

大家好,这里是X🐟,今天继续来更DOM基础啦,事先说明一下本篇博客主要内容,关于Node类型和Document类型的简单解释我在上一篇博客已经说明过了,这篇博客是对上一篇的延续,如果对这两个类型有疑惑的朋友可以去先看上一篇博客:点我点我🤍

那么废话不多说,让我们开始DOM基础二吧!!!!!

在这里插入图片描述

录录子💤

  • Node类型
    • 节点之间的关系
    • 节点的childNodes属性
    • hasChildNodes()方法
    • ownerDocument属性
    • 操作节点的方法🚇
      • appendChild()方法
      • insertBefore()方法
      • replaceChild()方法
      • removeChild()
      • 方法使用演示
        • 删除节点演示🤏
        • 替换节点演示🙌
        • 尾部添加、插入节点演示👏
  • 结语

Node类型

节点之间的关系

上一篇博客讲了每个节点都有三个属性:nodeValue、nodeName、nodeType,现在来讲讲节点之间的关系

大家都知道HTML就是一个个标签组合而成的,也叫做标签语言,之前讲到了这就像一棵树,每个节点之间构成的树,那么这棵树,细化到每个节点之间,肯定都是存在一定关系的,就像家谱图一样,学过树的朋友们都知道,存在着子树、根、父亲等等的概念,在这里也一样,比如:< body>元素可以看成< html>元素的子元素;也就是< html>元素是< body>元素的父亲;< head>元素可以看成是< body> 的同胞元素,因为它们都有着共同的父亲< html>
在这里插入图片描述

节点的childNodes属性

上面讲到了每个节点之间肯定多多少少存在着关系,那么这个关系可以用childNodes属性来描述,每个节点都有该属性,并且其中保存着NodeList对象,NodeList是一种类数组对象,用来保存一组有序的节点,这样就可以通过位置来访问这些节点啦

注意注意👱‍♀️:上面说到每个节点都具有这个属性,那么我们通过方括号的形式就可以来访问NodeList的值了,并且它们都具有Length属性,但是但是,NodeList不是Array的实例👨‍🎓塔实际上是DOM结构动态查询的结果,它是会变化的,所以我们访问元素就变得超级无敌简单啦,上一个图👇👇👇

在这里插入图片描述
具体使用方法也和数组一样,非常简单:

var firstChild = yourNode.childNodes(0);
var secondChild = yourNode.childNodes(1);
var length = yourNode.childNodes.length;
//用 item() 访问也是可以的,只是习惯了直接用括号比较方便
var firstChild_1 = yourNode.childNodes.item(0);

🏡在上面的图可以看到还有一个parentNode属性,并且它们都指向相同的一个parent,因为所有的节点都有着相同的父亲,所以除了父节点外,包含在childNodes列表当中的每个节点相互之间都是同胞节点🚧🚧🚧

在这里插入图片描述

⛪在上面的图也可以看到还有nextSibling、previousSibling,通过这两个属性就可以访问同一个列表里其他的节点,其中,列表中第一个节点的previousSibling属性值为null,同样最后一个节点的nextSibling属性也为null🚥🚥🚥如果列表中只有一个节点,那么两个属性值都为null🚛
那至于lastChild和firstChild和父节点之间的关系就不说啦,显而易见

在这里插入图片描述

hasChildNodes()方法

想判断一个节点是否包含子节点,除了使用length方法外,这个函数非常常用~~
当一个节点包含一个或者多个子节点的情况下返回true,否则返回false

ownerDocument属性

这是节点的最后一个属性啦,这个属性指向表示整个文档的文档的节点🚢就是“所属关系”的意思,因为任何节点都不能同时存在于两个或者多个文档中,通过这个属性我们就可以直接访问文档节点🗼

操作节点的方法🚇

注意噢,要使用以下方法的话,操作的对象必须都是某个节点的子节点,也就是你要使用的话必须先取得父节点🛹🛹🛹当然了,不是所有节点都有子节点的,所以这样就很容易导致没有子节点又调用了这些方法,这样就会出错🛫🛫🛫下面先介绍方法,最后再举例子演示🌤🌤🌤

appendChild()方法

该方法可以在childNodes列表的尾部添加一个节点,添加完之后,所有的父节点、子节点都会得到相应的更新,且该方法会返回新增的节点
在这里插入图片描述

insertBefore()方法

该方法可以将节点放在childNodes列表中的任意位置,该方法自然就需要接受两个参数:要插入的节点和作为参照的节点,插入节点之后,被插入的节点就变成了参照节点的前一个节点(previousSibling),同时被方法返回,如果参照节点为null,则此时该方法就如appendChild()方法效果一致

replaceChild()方法

该方法就是替换节点,并且删除原本的节点🚄该方法接受两个参数:要插入的节点和要替换的节点,虽然说被替换的节点依然在文档中,但是它在文档中已经没有它的位置了,并且被替换的节点与之相关的所有关系指针也同时会被复制过来,所以大可不必担心
在这里插入图片描述

removeChild()

这个方法只接受一个参数,也就是要移除的节点,被移除的节点作为返回值返回🚛

方法使用演示

里面我运用了一些函数,如果没有学过的朋友我下面都有注释的,都非常简单,看名字就大致明白这个函数的功能🚤🚤🚤

在这里插入图片描述

删除节点演示🤏

在这里插入图片描述

<!DOCTYPE html>
<html>
<head>
<title>www.jb51.net 删除节点</title>
<script language="javascript">
	function delNode()
	{
		var deleteN=document.getElementById('di');
		if(deleteN.hasChildNodes())
		{
		  deleteN.removeChild(deleteN.lastChild);
		}
	}
	</script>
</head>
<body>
	<h1>删除节点操作演示</h1>
	<div id="di">
		<p>第一行</p>
		<p>第二行</p>
		<p>第三行</p>
</div>
	<form>
	<input type="button" value="删除行" onclick="delNode();"/>
		</form>
	</body>

</html>

替换节点演示🙌

在这里插入图片描述


<!DOCTYPE html>
<html>
<head>
	<style>
		ul li::marker {
		  content: '😎';
		}		
		</style>
<script type="text/javascript">
	function replace_test(){
		 //思路:1.首先找到要替换的节点;2. 创建一个新的节点;3.找到父节点,在父节点的角度调用replaceChild(新,旧)方法
		 var newli = document.createElement('li');//创建新节点
		 var newtext = document.createTextNode('学生');//创建该新节点的文本节点
		 newli.appendChild(newtext);
		 var nodeul = document.getElementsByTagName('ul')[0];//找到父节点
		 var oldli = nodeul.children[2];//找到要替换的节点
		 nodeul.replaceChild(newli,oldli);//替换
	}
  </script>
</head>

<body style="background-color: #FFD700;">
<div id="container">

 <ul>
  <li>校长</li>
  <li>老师</li>
  <li>小明</li>
  <li>主任</li>
  <li>副校长</li>

 </ul>
</div>
<button onclick="replace_test()" value="">节点的替换与修改按钮</button>
</body>
</html>

尾部添加、插入节点演示👏

在这里插入图片描述

<!DOCTYPE html>
<html>

<head>
	<style>
		ul li::marker {
		  content: '💜';
		}
			
		</style>

<script type="text/javascript">
//实现:在冬天前插入秋天
	function insert_test(){
		 var newli = document.createElement('li');//创建新节点
		 var new_li_text = document.createTextNode('秋天');
		 newli.appendChild(new_li_text);//将这个文本节点追加到新节点上
		 var nodeul = document.getElementsByTagName('ul')[0];//获取第一个UL的节点
		 var nodeli_3 = nodeul.getElementsByTagName('li')[2];//获取UL的第3个节点
		 nodeul.insertBefore(newli,nodeli_3);
		 
	}

</script>
</head>

<body style="background-color: #ff557f;">
<div id="container">

 <ul>
  <li>春天</li>
  <li>夏天</li>
  <li>冬天</li>

 </ul>
</div>
<button onclick="insert_test()" value="">节点的添加</button>
</body>
</html>

结语

好啦,这就是本篇博客的所有内容,如果对你有帮助的话,别忘了点赞、收藏,再来一波关注噢🧡🧡🧡

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

暴打JavaScript语法之DOM基础二:Node类型的详细说明和操作节点的操作演示 的相关文章

随机推荐