DOM编程系列之Node对象个人分享
Node对象
Node对象是什么
- 所谓Node对象就是DOM的标准规范中提供了Node对象,该对象主要提供了用于解析DOM节点树结构的属性和方法
示例代码:
<body>
<button id="btn"> 哒哒哒 </button>
<script>console.log(document);// 1. Node对象并不像Document对象一样 - 提供直接使用对象// console.log(node);// 2. Node类型不允许通过new关键字创建对象的/*var node = new Node();console.log(node);*/var btnElement = document.getElementById('btn');console.log(btnElement instanceof HTMLButtonElement);//调用结果为 true// 定位页面元素其实就是Node对象 - 称为元素节点console.log(btnElement instanceof Node);// 调用结果为 trueconsole.log(Node.prototype);//拓展var btn = document.createElement('button');console.log(btn instanceof Node);// 调用结果为 true
</script>
</body>
继承链关系
- Node对象是继承于Event Target对象的, EventTarget是一个用于接收事件的对象
示例代码:
<body>
<script>/* 判断Node原型是否在目标事件上 */console.log(Node.prototype instanceof EventTarget);// 调用结果为 trueconsole.log(Document.prototype instanceof Node);// 调用结果为 trueconsole.log(Element.prototype instanceof Node);// 调用结果为 true
</script>
</body>
判断节点类型
<body>
<button id="btn" class="cls">哒哒哒</button>
<script>// 1. 元素节点// 在页面上查找指定ID属性名字的元素var btn1 = document.getElementById('btn');// 元素节点的nodeName属性值为标签名 (大写的)console.log(btn1.nodeName);// 调用结果为 BUTTONconsole.log(btn1.nodeType);// 调用结果为 1console.log(btn1.nodeValue)// 调用结果为 null// 2. 文本节点// 获取第一个子节点var textNode = btn1.firstChild;// 文本节点的nodeName属性值是固定值(#text)console.log(textNode.nodeName);// 调用结果为 #textconsole.log(textNode.nodeType);// 调用结果为 3// 文本节点的nodeValue属性值是文本内容console.log(textNode.nodeValue);// 调用结果为 哒哒哒// 3. 属性节点// 获取属性节点var attrNode = btn1.getAttributeNode('class');// 属性节点的nodeName属性值为当前元素的属性名称console.log(attrNode.nodeName);// 调用结果为 classconsole.log(attrNode.nodeType);// 调用结果为 2// 属性节点的nodeValue属性值为当前元素的属性名称对应的值console.log(attrNode.nodeValue);// 调用结果为 cls
</script>
</body>
遍历节点
获取父节点
- 通过HTML页面中指定元素查找其父节点,可以使用Node对象的parentNode属性实现
示例代码:
<body>
<ul id="parent"><li>舒克</li><li id="bt">贝特</li><li>小龙人</li>
</ul>
<script>// 作为子节点var bt = document.getElementById('bt');// 通过子节点获取其父节点var parent1 = bt.parentNode;console.log(parent1);// parentElement属性 - 表示获取其父元素节点var parent2 = bt.parentNode;console.log(parent2);var html = document.documentElement;console.log(html.parentNode);// 调用结果为 文档节点console.log(html.parentElement);// 调用结果为 null
</script>
</body>
获取子节点
通过HTML页面中指定元素查找其子节点,可以通过以下Node对象的属性实现
- childNode - 获取指定节点的所有子节点
- firstChild - 获取指定节点的第一个子节点
- lastChild - 获取指定节点的最后一个子节点
示例代码:
<body>
<ul id="parent"><li>舒克</li><li id="bt">贝特</li><li>小龙人</li>
</ul>
<script>var parent = document.getElementById('parent');var children = myTools.childNodes(parent);console.log(children);/*var firstChild = parent.firstChild;firstChild = firstChild.nextSibling;console.log(firstChild);*/var firstChild = myTools.firstChild(parent);console.log(firstChild);var lastChild = parent.lastChild;lastChild = lastChild.previousSibling;console.log(lastChild);
</script>
</body>
获取相邻兄弟节点
通过HTML页面中指定元素查找其相邻兄弟节点,可以通过以下Node对象的属性实现
- previousSibling - 获取指定节点的前面相邻兄弟节点
- nextSibling - 获取指定节点的后面相邻兄弟节点
示例代码:
<body>
<ul id="parent"><li>舒克</li><li id="bt">贝特</li><li>小龙人</li>
</ul>
<script>var bt = document.getElementById('bt');var prev = bt.previousSibling;prev = prev.previousSibling;console.log(prev);console.log(prev.previousSibling);console.log(prev.previousSibling.previousSibling);var next = bt.nextSiblingnext = next.nextSibling;console.log(next);
</script>
</body>
空白节点
- childNodes属性 - 获取指定节点的所有子节点,同时也会获取到所有的空白节点
示例代码:
<body>
<ul id="parent"><li>舒克</li><li id="bt">贝特</li><li>小龙人</li>
</ul>
<script>var parent = document.getElementById('parent');// childNodes属性 - 获取指定节点的所有子节点,同时也会获取到所有的空白节点var children = parent.childNodes;console.log(children);
</script>
</body>
代码分析图:
处理空白节点方法
示例代码:
<body>
<ul id="parent"><li>舒克</li><li id="bt">贝特</li><li>小龙人</li>
</ul>
<script>// 1. 利用循环 + 判断筛选var arr = [];// 定义一个空数组/* 利用循环遍历出所有子节点 */for (var i=0; i<children.length; i++){var child = children[i];/* 判断语句 */if (child.nodeType === 1) {/* 将得到的结果放回去 */arr.push(child);}}console.log(arr);// 2. 利用getElementsByTagName()方法var lis = parent.getElementsByTagName('li');console.log(lis);
</script>
</body>
插入节点
appendChild()方法
parentNode.appendChild(childNode)
- parentNode - 表示指定节点(作为父节点)
- childNode - 表示被添加的节点(作为子节点)
- 特点 - 被添加在指定节点所有子节点列表的最后
示例代码:
<body>
<ul id="parent"><li>舒克</li><li id="bt">贝特</li><li>小龙人</li>
</ul>
<script>var parent = document.getElementById('parent');// 给指定父级元素添加子级元素var newLi = document.createElement('li');// 给子级元素添加文本var textNode = document.createTextNode('蓝精灵');newLi.appendChild(textNode);/*parentNode.appendChild(childNode)* 说明* parentNode - 表示指定节点(作为父节点)* childNode - 表示被添加的节点(作为子节点)* 特点 - 被添加在指定节点所有子节点列表的最后*/parent.appendChild(newLi);
</script>
</body>
insertBefore()方法
- insertBefore()方法 - 优点是可以在指定元素之前添加新的元素节点
- 注意 - DOM中的Node对象并没有提供 insertAfter() 方法
示例代码:
<body>
<ul id="parent"><li>舒克</li><li id="bt">贝特</li><li>小龙人</li>
</ul>
<script>/*insertBefore()方法 - 优点是可以在指定元素之前添加新的元素节点注意 - DOM中的Node对象并没有提供 insertAfter() 方法*/// 通过ID属性获取指定父节点var parent = document.getElementById('parent');// 给父级节点创建新的子元素节点var newLi = document.createElement('li');// 给新创建的子元素节点创建文本节点var textNode = document.createTextNode('亚古兽');// 把新建的文本节点添加到指定的元素节点上newLi.appendChild(textNode);// 获取目标节点var bt = document.getElementById('bt');// 将新创建的子元素节点插入到指定的元素节点之前parent.insertBefore(newLi,bt);
</script>
</body>
insertAfter()方法
分析图:
删除节点
- 调用removeChild()方法的node表示child参数的父节点
- child参数则表示要删除的那个节点
- 注意 - 如果child参数不是node的子节点的话,调用该方法时会报错
示例代码:
<body>
<ul id="parent"><li>舒克</li><li id="bt">贝特</li><li>小龙人</li>
</ul>
<li id="xlr">小龙人</li>
<script>// 通过ID属性获取指定元素var parent = document.getElementById('parent');// 通过ID属性获取指定元素节点var bt = document.getElementById('bt');// 删除获取的指定节点元素parent.removeChild(bt);var xlr = document.getElementById('xlr');parent.removeChild(xlr)
</script>
</body>
替换节点
parentNode.replaceChild(newChild,currentChild)
参数
- parentNode - 表示目标(被替换)节点的父节点
- newChild - 表示替换(新)节点
- currentChild - 表示目标节点
情况:
- 是新创建的节点 -> 替换
- 是页面已存在的节点 -> 移动+替换
示例代码:
<body>
<ul id="parent"><li>舒克</li><li id="bt">贝特</li><li>小龙人</li>
</ul>
<ul id="parent1"><li>大头儿子</li><li id="xtbb">小头爸爸</li><li>围裙妈妈</li>
</ul>
<script>// 1. 获取目标节点的父节点var parent = document.getElementById('parent');// 2. 获取目标节点var bt = document.getElementById('bt');// 3. 创建新节点var newLi = document.createElement('li');// 给新创建的子元素节点添加文本节点内容var textNode = document.createTextNode('大灰狼');// 将新创建的文本节点内容放到新创建的元素节点上newLi.appendChild(textNode);// 通过ID属性获取到要替换的子元素节点var xtbb = document.getElementById('xtbb');/*parentNode.replaceChild(newChild,currentChild)* 参数* parentNode - 表示目标(被替换)节点的父节点* newChild - 表示替换(新)节点* currentChild - 表示目标节点* 情况* 是新创建的节点 -> 替换* 是页面已存在的节点 -> 移动+替换*/// 将要替换的子元素节点放到指定的位置parent.replaceChild(xtbb,bt);</script>
</body>
复制节点
node.cloneNode(deep)
deep参数 - 表示是否复制当前节点的后代节点
- true - 表示复制后代节点
- false - 默认值, 表示不复制后代节点
- 注意 - 复制操作时, 注意ID属性的值
示例代码:
<body>
<button id="btn">哒哒哒</button>
<script>var btn = document.getElementById('btn');/*node.cloneNode(deep)* deep参数 - 表示是否复制当前节点的后代节点* true - 表示复制后代节点* false - 默认值, 表示不复制后代节点* 注意 - 复制操作时, 注意ID属性的值*/var newBtn = btn.cloneNode(true);var body = document.body;body.appendChild(newBtn);</script>
</body>
textContent属性
textContent属性
- 作用 - 设置获取指定节点的文本内容
- 注意 - 具有浏览器兼容问题(IE 6/7/8不支持)
示例代码:
<body>
<p id="p1">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ad dolores error expedita facere illum nulla, obcaecati quod voluptate. A accusamus dolore eius est iure molestias optio placeat recusandae similique vel.</p>
<script>var p1 = document.getElementById('p1');/*var textNode = p1.firstChild;var content = textNode.nodeValue;*//*textContent属性* 作用 - 设置获取指定节点的文本内容* 注意 - 具有浏览器兼容问题(IE 6/7/8不支持)*/var content;if (p1.textContent === undefined) {// IE 6/7/8/不支持content = p1.innerText} else {// 其他浏览器支持content = p1.textContent}console.log(content);
</script>
</body>
DOM编程系列之Node对象个人分享相关推荐
- 【JavaScript】DOM编程-DHTML与Windows对象
A.什么是DHTML? javascript是在浏览器中运行的,如果它仅限于加减乘除运算,而不能将运算结果 显示在浏览器当中,或者不能与用户进行交互操作,那么他就失去了存在的意义. 在程序中,创建的对 ...
- java lock 对象_Java并发编程锁系列之ReentrantLock对象总结
Java并发编程锁系列之ReentrantLock对象总结 在Java并发编程中,根据不同维度来区分锁的话,锁可以分为十五种.ReentranckLock就是其中的多个分类. 本文主要内容:重入锁理解 ...
- html dom firstchild,DOM Node对象属性firstChild
DOM Node对象属性firstChild指定节点的第一个子节点. 语法 以下是firstChild属性的使用语法. nodeObject.firstChild 示例 文件:node.xml 的内容 ...
- JavaScript与DOM编程
文章目录 JavaScript JS简介 常量与变量 数组 创建数组 访问数组:通过指定数组名以及索引号,可以访问某个特定的元素 对象 1.系统所提供对象 2.自定义对象 访问对象 函数 第一种 第二 ...
- JavaScript函数和BOM及DOM编程(详细总结-无尿点)
JavaScript函数和BOM及DOM编程(详细总结-无尿点) javascript 函数 一.javascript函数 1.1 概述 1.2 常见的系统函数 1.2.1 eval 1.2.2 pa ...
- html用dom显示xml,dom 编程(html和xml)
html dom与xml dom关系: 什么是 DOM? DOM 是 W3C(万维网联盟)的标准. DOM 定义了訪问 HTML 和 XML 文档的标准: "W3C 文档对象模型 (DOM) ...
- reentrantlock非公平锁不会随机挂起线程?_【原创】Java并发编程系列16 | 公平锁与非公平锁...
本文为何适原创并发编程系列第 16 篇,文末有本系列文章汇总. 上一篇提到重入锁 ReentrantLock 支持两种锁,公平锁与非公平锁.那么这篇文章就来介绍一下公平锁与非公平锁. 为什么需要公平锁 ...
- JavaScript Dom编程艺术
当我对JavaScript还停留在只认识这几个字母的时候,有一天我突然心血来潮,在网上下了DOM Scripting的样章,照着里面的例子写了我平生第一个能让我知所以然JavaScript,在浏览器运 ...
- Python编程系列教程第13讲——隐藏数据和封装
视频地址:http://www.56.com/u88/v_OTM5NjU0MjE.html#fromoutpvid=OTM5NjU0MjE 普及网络安全知识,推动信息技术发展. 为祖国的网络安全撑起一 ...
- C#多线程编程系列(五)- 使用任务并行库
目录 1.1 简介 1.2 创建任务 1.3 使用任务执行基本的操作 1.4 组合任务 1.5 将APM模式转换为任务 1.6 将EAP模式转换为任务 1.7 实现取消选项 1.8 处理任务中的异常 ...
最新文章
- The HipHop Virtual Machine
- ASP.NET2.0 ReportingServices使用详解
- 在 Node.js 中用子进程操作标准输入/输出
- CodeChef--SEPT14小结
- 通过一个函数对比 mgrid以及meshgrid函数
- 封闭已久的智能驾驶系统,在云栖大会上,被敲开一个裂缝
- 基于WINCE6.0的nandflash驱动(基于K9F1G08U0B)
- 学习 LLVM(14) SmallPtrSet
- java 6 损坏,Java 异常处理六
- 【剑指offer】Java版代码(完整版)
- 如何使用macOS自带网络测速功能?
- 市场上硬杠,技术上死磕,华为如何跨越操作系统黑洞
- GitHub Top 100的Android开源库
- JS 页面繁简字转换
- 求最大公约数的4种常用算法
- python英语单词 扇贝英语安卓下载_扇贝单词英语版app下载_靠谱的外语软件扇贝单词英语版下载安装 安卓版 V3.4.302 - 罐头安卓网...
- 微信接龙,查人,查谁没有接龙,工具
- ubuntu系统安装时的分区方案
- JS控制字体大小中、设为首页、收藏本站功能、超链接去掉颜色
- Mali GPU linux下驱动编译
热门文章
- 浏览器Quirksmode(怪异模式)与CSScompat
- 关于循环经济的三维展示
- Python爬取豆瓣电影
- 从零基础入门Tensorflow2.0 ----四、15.tf.data读取csv文件并与tf.keras结合使用
- 从零基础入门Tensorflow2.0 ----二、4.4 wide deep 模型(多输出)
- android textview设置大小,android – 如何缩放/调整文本大小以适应TextView?
- 计算机网络(HTTP、TCP)的连接管理
- Android-Universal-Image-Loader学习笔记(4)--download
- 树莓派4烧录系统后黑屏_原创试用 | 树莓派3B+测评(二)ubuntu系统烧录+彩虹屏问题解决...
- 美团 Flink 大作业部署与状态稳定性优化实践