网站首页 > 技术文章 正文
1.1 创建节点
DOM中提供了两种创建节点的方法,一种是创建文本节点,另一种是创建元素节点。下面分别进行介绍。
创建文本节点
使用document对象提供的createTextNode()方法可以创建文本节点。
通常情况下,纯文本是不能直接添加到元素里面的,一般都要生成文本节点才能附加到元素中。
例如,要创建一个包括文字"我是文本节点"的文本节点,可以使用下面的代码:
var child=document.createTextNode("我是文本节点");
创建元素节点
使用document对象提供的createElement()方法可以创建元素节点。元素节点可以包含子节点,而且子节点不仅可以是文本节点,还可以是元素节点。
例如,要创建一个段落节点,可以使用下面的代码:
var child=document.createElement("p"); //创建一个段落节点
1.2 插入节点
Node对象提供了两个插入节点的方法,分别是insertBefore()和appendChild()。下面分别进行介绍。
insertBefore()定义
insertBefore() 方法的作用是:在现有的子节点前插入一个新的子节点
insertBefore用法
target.insertBefore(newChild,existingChild)
newChild作为target的子节点插入到existingChild节点之前,existingChild为可选项参数,当为null时其效果与appendChild一样
insertBefore例子
var oTest = document.getElementById("test");
var newNode = document.createElement("p");
newNode.innerHTML = "This is a test";
oTest.insertBefore(newNode,oTest.childNodes[0]);
在特点节点后插入节点
DOM本身没有提供insertAfter()方法
function insertAfter(newElement, targetElement){
var oParent = targetElement.parentNode; //首先找到目标元素的父元素
if(oParent.lastChild == targetElement) //如果目标元素已经是最后一个子元素了
oParent.appendChild(newElement); //则直接用appendChild()加到子元素列表的最后
else //否则用insertBefore()插入到目标元素的下一个兄弟元素之前
oParent.insertBefore(newElement,targetElement.nextSibling);
}
使用实例:
<html>
<head>
<title>insertAfter()方法</title>
<script language="javascript">
function insertAfter(newElement, targetElement){
var oParent = targetElement.parentNode; //首先找到目标元素的父元素
if(oParent.lastChild == targetElement) //如果目标元素已经是最后一个子元素了
oParent.appendChild(newElement); //则直接用appendChild()加到子元素列表的最后
else //否则用insertBefore()插入到目标元素的下一个兄弟元素之前
oParent.insertBefore(newElement,targetElement.nextSibling);
}
function insertP(){
var oOldP = document.getElementById("myTarget");
var oNewP = document.createElement("p"); //新建节点
var oText = document.createTextNode("这是一个感人肺腑的故事");
oNewP.appendChild(oText);
insertAfter(oNewP,oOldP); //插入节点
}
</script>
</head>
<body onload="insertP()">
<p id="myTarget">插入到这行文字之后</p>
<p>也就是插入到这行文字之前,但这行没有id,也可能不存在</p>
</body>
</html>
appendChild()方法
用于在当前节点的子节点的末尾处插入节点, 如果要插入节点已经存在, 则将其删除, 其语法格式如下:
target.appendChild(newnode)
如需向 HTML DOM 添加新元素, 您首先必须创建该元素(元素节点), 然后把它追加到已有的元素上。
<div id="d1">
<p id="p1">This is a paragraph.</p>
<p id="p2">This is another paragraph.</p>
</div>
<script>
var para=document.createElement("p");
var node=document.createTextNode("This is new.");
para.appendChild(node);
var element=document.getElementById("d1");
element.appendChild(para);
</script>
实例:
综合使用appendChild()和insertBefore()创建元素
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<script>
window.onload=function ()
{
var oBtn=document.getElementById('btn1');
var oUl=document.getElementById('ul1');
var oTxt=document.getElementById('txt1');
oBtn.onclick=function ()
{
var oLi=document.createElement('li');
var aLi=document.getElementsByTagName('li');
oLi.innerHTML=oTxt.value;
//父级.appendChild(子节点);
//oUl.appendChild(oLi);
if(aLi.length>0) //如果aLi对象是空元素,采用insertBefore()方法程序会报错,因此需要作出判断
{
oUl.insertBefore(oLi, aLi[0]);
}else
{
oUl.appendChild(oLi);
}
};
};
</script>
</head>
<body>
<input id="txt1" type="text"/>
<input id="btn1" type="button" value="创建li"/>
<ul id="ul1">
</ul>
</body>
</html>
1.3 删除已有的 HTML 元素
如需删除 HTML 元素,您必须清楚该元素的父元素:
<div id="div1">
<p id="p1">This is a paragraph.</p>
<p id="p2">This is another paragraph.</p>
</div>
<script>
var parent=document.getElementById("div1");
var child=document.getElementById("p1");
parent.removeChild(child);
</script>
1.4 替换 HTML 元素
如需替换 HTML DOM 中的元素,请使用 replaceChild() 方法:
<div id="div1">
<p id="p1">This is a paragraph.</p>
<p id="p2">This is another paragraph.</p>
</div>
<script>
var para=document.createElement("p");
var node=document.createTextNode("This is new.");
para.appendChild(node);
var parent=document.getElementById("div1");
var child=document.getElementById("p1");
parent.replaceChild(para,child);
</script>
1.5 复制 HTML 元素
node.cloneNode(deep)
cloneNode()方法创建节点的拷贝, 并返回该副本。
cloneNode()方法克隆所有属性以及它们的值。如果您需要克隆所有后代(如文本节点), 请把deep参数设置true, 否则设置为false, 默认值false。
<h2>节点赋值</h2>
<ul>
<li addr='德国'>奔驰</li>
<li addr='德国' id='horse'>宝马</li>
<li addr='德国'>奥迪</li>
</ul>
<ul>
<li addr='美国'>福特</li>
<li addr='美国'>林肯</li>
<li addr='美国'>雪佛兰</li>
</ul>
<input type="button" value="复制" onclick="f1()" />
<script>
//节点复制
function f1(){
//获得页面已有节点
var horse = document.getElementById('horse');
var fu_horse = horse.cloneNode(true);//复制一个"宝马"节点【深层】
var fu_horse = horse.cloneNode(false);//复制一个"宝马"节点【浅层】
//节点追加
var ull_USA = document.getElementsByTagName('ul')[1];
ull_USA.appendChild(fu_horse);
}
</script>
appendChild()和insertBefore()区别
1、appendChild和insertBefore是做对节点的方法来使用的,而insertAfter只是自定义的一个函数
2、insertBefore相对于appendChild来说,比较灵活可以将新的节点插入到目标节点子节点数组中的任一位置。
3、使用appendChild和insertBefore来插入新的节点前提是,其兄弟节点必须有共同的父节点
猜你喜欢
- 2024-10-25 《王牌部队》高粱拿了“喜剧人”剧本,笑点泪点都被他承包了
- 2024-10-25 纯爱小说推荐|生活所迫,我只能把你的后宫变成我的兄弟了
- 2024-10-25 占星秒懂|宫位的形成与解析(下) 宫位意思
- 2024-10-25 农村兄弟建双拼更有气势还省钱,2020年超受欢迎的双拼户型分享
- 2024-10-25 我爸说,“你没有结婚,我在村子里比做贼还丢人!”
- 2024-10-25 「漫步计算机系统」之数据结构与算法(18):红黑树结点的删除
- 2024-10-25 IT兄弟连 HTML5教程 CSS3揭秘 CSS3概述
- 2024-10-25 通过css类/选择器选取元素 文档结构和遍历 元素树的文档
- 2024-10-25 琅琊榜:兄弟之情,远比男女之情更加动人
- 2024-10-25 参加兄弟婚礼祝福语 参加兄弟婚礼祝福语简短
你 发表评论:
欢迎- 最近发表
-
- 吴谨言专访大反转!痛批耍大牌后竟翻红,六公主七连发力显真诚
- 港股2月28日物业股涨幅榜:CHINAOVSPPT涨1.72%位居首位
- 港股2月28日物业股午盘:CHINAOVSPPT涨1.72%位居首位
- 港股3月2日物业股涨幅榜:CHINAOVSPPT涨1.03%位居首位
- 港股3月2日物业股午盘:CHINAOVSPPT涨1.03%
- 天赋与心痛的背后:邓鸣贺成长悲剧引发的深刻反思
- 冯小刚女儿徐朵追星范丞丞 同框合照曝光惹人羡,回应网友尽显亲民
- “资本大佬”王冉:51岁娶小17岁童瑶,并承诺余生为娇妻保驾护航
- 港股3月2日物业股午盘:CHINAOVSPPT涨1.03%位居首位
- 「IT之家开箱」vivo S15 图赏:双镜云窗,盛夏风光
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)