目录

  • 1、节点介绍
  • 2、案例-下拉菜单
  • 3、兄弟节点
  • 4、创建节点
  • 5、案例-简单发布留言
  • 6、删除节点
  • 7、复制节点(克隆节点)

1、节点介绍

1.为什么要学习节点
可以利用父子兄节点关系获取元素
逻辑性强,但是兼容性差.
2.节点概述
(1)网页中所有内容都是节点,用node表示.
(2)所有的节点都可以被修改,也可以创建或删除.
(3)节点至少拥有三个属性值: nodeType(节点类型) nodeName(节点名称) 和nodeValue(节点值)
(4)文本节点分类
i: 元素节点 nodeType为 1
ii: 属性节点 nodeType为 2
iii: 文本节点 nodeType为 3 (文本节点包含文字、空格、换行等)
(5)实际开发中,节点操作主要是操作元素节点。
3、节点层级
DOM树把节点划分为不同的层级关系,常见的是父子兄层级关系。
(1)父级关系
node.parentNode
得到的是离元素最近的父级节点,如果找不到父节点返回为空。
(1)子级关系
-parentNode.childNodes(标准)
得到所有节点,包含属性节点、文本节点、元素节点。
如果想要获取里面的元素节点,要经过循环处理,所以不提倡使用childNodes。
-parentNode.children(非标准)
实际开发中常用的。
-.firstChild
获取第一个元素节点,包含所有节点类型。
-lastChild
获取最后一个元素节点,包含所有节点类型。
-firstElementChild
返回第一个子元素节点;有兼容问题ie9以上可用
-lastElementChild
返回最后一个子元素节点;有兼容问题ie9以上可用。
-实际开发常用方法:
.children[0] ;获得第一个子元素。
.children[元素名.children.length] ;获得最后一个子元素。

2、案例-下拉菜单

<style>a {text-decoration: none;color: #999;}li {list-style: none;}.nav {width: 300px;height: 250px;margin: 20px auto;}.nav ul {padding-inline-start: 0px;}.nav ul li {float: left;margin-top: 10px;}.nav ul li a {position: relative;width: 50px;height: 30px;background-color: #eee;line-height: 30px;text-align: center;margin: 0 20px;}.nav ul li ul {display: none;position: relative;top: 10px;left: 22px;width: 30px;height: 20px;font-size: 12px;padding-inline-start: 0px;}.nav ul li ul li {width: 30px;height: 20px;border: 1px solid yellow;}</style>
<body><div class="nav"><ul><li><a href="">微博</a><ul class="con"><li>私信</li><li>评论</li><li>@我</li></ul></li><li><a href="">微博</a><ul><li>私信</li><li>评论</li><li>@我</li></ul></li><li><a href="">微博</a><ul><li>私信</li><li>评论</li><li>@我</li></ul></li><li><a href="">微博</a><ul><li>私信</li><li>评论</li><li>@我</li></ul></li></ul></div><script>// 获得元素var nav = document.querySelector('.nav');var ul = nav.querySelector('ul');var lis = ul.children;console.log(lis)//  绑定元素 for (var i = 0; i < lis.length; i++) {lis[i].onmouseover = function() {this.children[1].style.display = 'block';}lis[i].onmouseout = function() {this.children[1].style.display = 'none';}}</script></body>

3、兄弟节点

(1).nextSibling
获取当前元素的下一个兄弟节点,找不到返回null,同样是包含所有节点。
(2).previousSibling
获取当前元素的上一个兄弟节点,找不到返回null,同样是包含所有节点。
(3).nextElementSibling
返回当前元素的下一个兄弟元素节点,找不到返回null。有兼容性问题,ie9以上支持。
(4).previousElementSibling
返回当前元素的上一个兄弟元素节点,找不到返回null。有兼容性问题,ie9以上支持。
如何解决兼容性问题:
可以自己封装一个函数
function getNextElementSibling(element){
var el=element;
while (el = el.nextSibling){
if( el.nodeType===1){
return el;
}
}
return null;
}

4、创建节点

document.createElement(‘tagName’)
根据我们的需求动态生成的,所以我们也称为动态创建元素节点
步骤:
(1)创建节点
(2)添加节点
node.appendChild(child)
node是父级,child是子级;后面追加元素
(3)添加元素的另一种方式
node.insertBefore(child,指定元素)
在指定元素的前面添加节点

5、案例-简单发布留言

分析:点击按钮后,生成一个li ,把li添加到ul里;添加li的同时,把文本域的内容通过li.innerHTML赋值给li

 <body><textarea name="" id="" cols="30" rows="10"></textarea><button>添加</button><ul></ul><script>//获取元素var text = document.querySelector('textarea');var btn = document.querySelector('button');var ul = document.querySelector('ul');//注册事件 btn.onclick = function() {//创建节点liif(text.value==''){alert('请输入内容!');return false;}else{var li = document.createElement('li');//先有li,才能将文本域的内容赋值给lili.innerHTML = text.value;// ul.appendChild(li);//最新的评论添加到最上面ul.insertBefore(li,ul.children[0])text.value='';}   }</script></body>

6、删除节点

node.removeChild(child)
从DOM中删除一个字节点,返回删除的节点。
案例:

<body><button>删除</button><ul><li>熊大</li><li>熊二</li><li>关头强</li></ul><script>//获取元素var ul= document.querySelector('ul');var btn = document.querySelector('button');//注册事件 btn.onclick = function(){if(ul.children.length==0){this.disabled=true;}else{ul .removeChild(ul.children[0]);}}</script></body>

发布留言并删除留言:
在案例5的基础上,创建li 的同时也要创建个a链接

<body><body><textarea name="" id="" cols="30" rows="10"></textarea><button>添加</button><ul></ul><script>//获取元素var text = document.querySelector('textarea');var btn = document.querySelector('button');var ul = document.querySelector('ul');//注册事件 btn.onclick = function() {//创建节点liif (text.value == '') {alert('请输入内容!');return false;} else {var li = document.createElement('li');//先有li,才能将文本域的内容赋值给lili.innerHTML = text.value + "<a href='javascript:;'>删除</a>";// ul.appendChild(li);//最新的评论添加到最上面ul.insertBefore(li, ul.children[0])text.value = '';}//删除元素 获取a链接var as= document.querySelector('a');//绑定事件as.onclick = function(){ul.removeChild(as.parentNode);}}</script></body>

7、复制节点(克隆节点)

node.cloneNode()
复制之后页面并不存在,要添加后才会在页面中显示。node.appendChild(child)添加节点
注意:
1、如果参数括号为空或者为false,则是浅拷贝,只复制结点本身,不克隆里面的子节点。
2、如果参数括号为空或者为true,则是深拷贝,复制结点本身,并克隆里面的子节点。

js 节点相关内容介绍 创建、删除、复制节点相关推荐

  1. 设计模式相关内容介绍

    1.设计模式相关内容介绍 1.1. 设计模式概述 创建型模式--------买建筑材料 用于描述------怎样创建对象,它的主要特点是----------将对象的创建与使用分离,这样可以降低系统的耦 ...

  2. 农村污水处理工程的运维相关内容介绍

    科学的运维管理是农村污水处理工程能够长期稳定运行的保障.过去,农村水务行业一直存在"重建设.轻运营"的问题,许多地区甚至对"晒太阳"现象司空见惯.随着环境控制越 ...

  3. mysql如何设置多节点_详细介绍Mysql5.7从节点设置多线程主从复制的办法

    软件安装:装机软件必备包 SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言.在使用它时,只需要发出& ...

  4. 设计模式相关内容介绍—UML

     统一建模语言(Unified ModelingLanguage,UML)是用来设计软件的可视化建模语言.它的特点是简单.统一.图形化.能表达软件设计中的动态与静态信息.         UML从目标 ...

  5. 【平台介绍】一站式OCR服务平台Textin的相关内容介绍

    ⼀.Textin 平台介绍 1.平台定位 TextIn是上海合合信息科技股份有限公司旗下智能文字识别技术.产品.服务的品牌,专注文字识别领域15年,对企业.开发者.个人用户提供智能文字识别引擎.产品. ...

  6. JS节点操作小结(创建节点,添加节点,获取节点,删除节点,复制节点)

    一,创建节点 document.createElement('li'),//创建一个节点 二,添加节点 insertBefore(要添加的节点, 添加在哪个节点之前) 在指定节点前面添加 三,获取节点 ...

  7. JS节点操作(2)- 创建节点,添加节点,删除节点,复制节点

    节点操作 1. 创建节点 document.createElement() 2. 添加节点 2.1 node.appendChild(child) 添加到子元素数组的末尾 <body>&l ...

  8. jQuery节点操作创建节点元素删除节点 替换节点复制节点等基本本操作

    节点操作 jQuery中节点操作 查找节点(前面章节已讲) 创建节点 插入节点 删除节点 替换节点 复制节点 创建节点元素 工厂函数$()用于获取或创建节点 $(selector):通过选择器获取节点 ...

  9. JS监听页面元素删除子节点、增加子节点、修改子节点的内容

    监听这个事件DOMSubtreeModified. 表示如果当前监听元素的子节点有改动:包括删除子节点.增加子节点.修改子节点的内容,都会触发这个事件. var container = documen ...

最新文章

  1. ES6深入学习记录(一)class方法相关
  2. 【绝对靠谱】Vue生成二维码Qrcode,可插入二维码中心logo图标,可以设置二维码颜色大小等属性
  3. 虚拟方法及抽象方法在使用上的区别
  4. mybatis plus 使用函数_这些Mybatis-Plus使用技巧,太火了
  5. 多通道图像的通道分享和合成函数-split、merge
  6. Linux运行结果是nan,linux命令学习
  7. 创智播客微服务_传智播客2018JavaEE IDEA版本
  8. Android-2D绘图
  9. 结合泛函极值_第2章泛函的极值.doc
  10. 计算机网络早期结构图,第21讲 计算机网络应用基础(一).ppt
  11. base64编码的学习和理解
  12. VTK:可视化算法之IronIsoSurface
  13. Spark UI的见解
  14. Pydiction : VIM上的PYTHON代码自动补全插件
  15. oracle 空值的排序问题 (转载),sqlserver、oracle数据库排序空值null问题解决办法
  16. sql 获取日期时分秒_[转载]ASP.NET和SQLserver获取当前日期时间:年月日、时分秒...
  17. php网上商城系统下载,php网上商城系统 v3.0 rc6
  18. YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5的发展(1)
  19. 最适合入门的laravel初级教程(一)序言
  20. 修复SSH Weak Algorithms Supported漏洞

热门文章

  1. 不用平衡因子及父节点来实现平衡二叉树
  2. Cookie的常用方法、删除Cookie的方式
  3. 游戏鼠标指针映射到手机、键鼠操作手游的三种方法:第三种二合一操作最简单
  4. goldengate mysql双向_GoldenGate配置(二)之双向复制配置
  5. pcb板表面处理:喷锡和沉金
  6. Chrome浏览器不重新加载css,js等静态文件
  7. 已发邮件修改邮件内容
  8. 你的花呗额度为啥那么低?我用Python帮你做分析
  9. css中盒子的属性,css盒子模型及属性介绍
  10. 关于json对象的遍历