Dom节点继承树基本操作

news2024/12/26 21:10:28

 遍历节点树

基于元素节点树的遍历

  1. parcntElcrmcnt -> 返回当前元素的父元秦节点 (IE不兼容)
  2. children ->只返回当前元素的元素子节点
  3. node.childFlement(ount === nodechildren.length当前元素节点的子元素(IE不兼容)
  4. firstElementChild->返回的是第一个元素节点(IE不兼容)
  5. laslElemenlChild -> 返回的是最后一个元素节点(IE不兼容)
  6. nextElementSibling / previousElementSibling ->返回后一个/前一个兄弟元素节点(IE不兼容)

例:parcntElcrmcnt -> 返回当前元素的父元秦节点

 方法一:返回第1层祖先元素节点

<div><strong><span><i></i> </span></strong></div>
var i = document.getElementsByTagName('i')[0];
console.log(i.parentElement);//<span>...</span>

  方法二:返回第n层祖先元素节点

    <div><strong><span><i></i> </span></strong></div>
    <script>
        var i = document.getElementsByTagName('i')[0];
        function retParent(elem, n) {
            while (elem && n) {
                elem = elem.parentElement;
                n--
            }
            return elem
        }
        retParent(i, 1)
    </script>

 例:children ->只返回当前元素的元素子节点

    <div><p></p><p></p><p></p></div>
    <script>
        var div = document.getElementsByTagName('div')[0];
        console.log(div.children); //HTMLCollection(3) [p, p, p]
    </script>

例:返回第n个兄弟元素节点

nextElementSibling / previousElementSibling ->返回后一个/前一个兄弟元素节点

    <strong></strong><span></span><i></i>
    <script>
        var span = document.getElementsByTagName('span')[0];
        function retSibling(e, n) {
            while (e && n) {
                if (n > 0) {
                    e = e.nextElementSibling
                    n--
                } else {
                    e = e.previousElementSibling
                    n++
                }
            }
            console.log(e, "e");
        }
        retSibling(span, -1) //<strong></strong>
    </script>

节点的四个属性

  1. nodeName---------元素的标签名,以大写形式表示,只读
  2. nodeValue----------Text(文本)节点或Comment(注释)节点的文本内容可读写
  3. nodeType-----------该节点的类型,只读
  4. attributes------------Element 节点的属性集合年的节点
  5. 节点的一个方法---- hasChildNodes()是否有子节点,返回true/false

nodeType返回节点的类型--数字

 

 例:

    <div><p></p></div>
    <script>
        var div = document.getElementsByTagName('div')[0];
        console.log(div.children[0].nodeType); //1
    </script>

 例: 获取div元素下的所有元素节点,

方法一:当nodeType===1是为元素节点,解决浏览器不兼容问题

      <div><p></p></div>
      var div = document.getElementsByTagName('div')[0];
      function retElementChild(node) {
            var arr = [],
                child = node.childNodes,//childNodes子节点们
                len = child.length;
            for (var i = 0; i < len; i++) {
                if (child[i].nodeType === 1) {
                    arr.push(child[i]);
                }
            }
            return arr;
        }
        retElementChild(div) //[p]

 方法二:children ->只返回当前元素的元素子节点

    <div><p></p></div>
    <script>
        var div = document.getElementsByTagName('div')[0];
        console.log(div.children);//HTMLCollection [p]
    </script>

例:attributes------------Element 节点的属性集合年的节点

<div class="demo" id="only"></div>
    <script>
        var div = document.getElementsByTagName('div')[0];
        console.log(div.attributes); //{0: class, 1: id, class: class, id: id, length: 2}
    </script>

 DOM结构树:继承关系

document--> HTMLDocument.prototype--> Document.prototype

       

dom操作


document.createElement()---创建元素节点
document.createTextNode()---创建文本节点
document.createComment()----创建注释节点
dncumenl.crealeDocumeniFmagme()

 var p = document.createElement("p");


appendChild0;---添加到父节点的最后一个子节点
insertBefore(a, b)---(a要插入的新节点-b参考节点)新节点将被插入到参考节点之前的位置

appendChild()方法

将一个新的子节点添加到指定父节点的子节点列表的方法。该方法接收一个参数,即要添加的新子节点,然后将其添加为父节点的最后一个子节点

类似于push方法,向元素中添加新的子元素

    <div></div>
    <script>
        var div = document.getElementsByTagName("div")[0];
        var text = document.createTextNode("Hello World");
        div.appendChild(text); //Hello World
    </script>

insertBefore(a, b)方法:

指定的参考节点之前插入新节点。使用 insertBefore() 方法时,需要指定两个参数:要插入的新节点和参考节点。新节点将被插入到参考节点之前的位置

    <div><span></span></div>
    <script>
        var div = document.getElementsByTagName("div")[0];
        var span = document.getElementsByTagName("span")[0];
        var strong = document.createElement("strong");
        div.insertBefore(strong, span); // <div><strong></strong><span></span></div>
    </script>

封装一个类似于insertBefore(a, b)的功能,插入的新元素在后面

   <div>
        <i></i>
        <b></b>
        <span></span>
    </div>
    <script>
        function snsertAfter(targetNode, afterNode) {
            var beforeNode = afterNode.nextElementSibling;
            if (beforeNode == null) {
                div.appendChild(targetNode);
            } else {
                div.insertBefore(targetNode, beforeNode);
            }
        }
        var div = document.getElementsByTagName("div")[0];
        var b = document.getElementsByTagName("b")[0];
        var e = document.createElement("em");
        snsertAfter(e, b) // 插入元素e到元素b之后
    </script>


removeChild()--在父节点中通过剪切删除,可以拿到删除后的元素

remove()--直接删除

    <div><span></span></div>
    <script>
        var div = document.getElementsByTagName("div")[0];
        var span = document.getElementsByTagName("span")[0];
        var str = div.removeChild(span) //通过剪切删除可以拿到删除后的元素
        console.log(str);//<span></span>
    </script>
    <div><span></span></div>
    <script>
        var div = document.getElementsByTagName("div")[0];
        var span = document.getElementsByTagName("span")[0];
        span.remove()
    </script>

替换

replaceChild(new, origin)---new新的,origin旧的

    <div><span></span></div>
    <script>
        var div = document.getElementsByTagName("div")[0];
        var span = document.getElementsByTagName("span")[0];
        var p = document.createElement("p");//创建p元素节点
        div.replaceChild(p, span) // 把span元素替换p元素
    </script>

Element属性方法

 例:

    <div></div>
    <script>
        var div = document.getElementsByTagName("div")[0];
        div.innerHTML = "<h2>hello world</h2>"; //hello world
        div.innerText = "<h2>hello world</h2>"; //<h2>hello world</h2>
    </script>

例:

getAttribute 方法用于获取元素的属性值。通过调用 getAttribute 方法并传入要获取的属性名作为参数,可以获得该元素指定属性的值

    <div id="doem"></div>
    <script>
        var div = document.getElementsByTagName('div')[0];
        console.log(div.getAttribute('id')); //doem
    </script>

setAttribute 方法用于给元素设置或添加一个属性。如果指定的属性已经存在,则该方法将更新该属性的值

    <div></div>
    <script>
        var div = document.getElementsByTagName('div')[0];
        div.setAttribute('class', 'newClass')
        console.log(div); //<div class="newclass"></div>
    </script>

查看滚动条的滚动距离

封装兼容性方法,返回浏览器视口尺寸

function getViewportDffset() {
            if (window.innerWidth) {
                return {
                    w: window.innerWidth,
                    h: window.innerHeight
                };
            } else {
                if (document.compatMode == 'BackCompat') {
                    return {
                        w: document.body.clientWidth,
                        h: document.body.clientHeight
                    };
                } else {
                    return {
                        w: document.documentElement.clientWidth,
                        h: document.documentElement.clientHeight
                    };
                }
            }
  }

利用scrollBy快速阅读的功能

    <div class="div"></div>
    <div class="div1"></div>
    <script>
        var div = document.getElementsByTagName("div")[0];
        var div1 = document.getElementsByTagName("div")[1];
        var timer = 0
        div.onclick = function() {
            timer = setInterval(function() {
                window.scrollBy(0, 10)
            }, 100);
        }
        div1.onclick = function() {
            clearInterval(timer);
        }
    </script>

查看元素的几何尺寸

求元素相对于文档的坐标 getFlementPositinn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1461734.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ONLYOFFICE编辑器升级大揭秘:v8.0版新特性实测与评价

ONLYOFFICE编辑器升级大揭秘&#xff1a;v8.0版新特性实测与评价 一个人简介二前言三操作步骤创建房间我的文档 四开发人员工具应用程序接口Javascript开发工具包插件SDK网络钩子 五测评总结六体验地址 一个人简介 &#x1f3d8;️&#x1f3d8;️个人主页&#xff1a;以山河作…

探索亚信安慧AntDB的数据库管理之道

AntDB数据库管理系统以其卓越的性能和稳定性成为众多用户的选择之一。这款系统采用了影响力大、社区繁荣、开放度高、生态增长迅速的PG内核&#xff0c;为用户提供了稳定可靠的数据库解决方案。 数据库的稳定性对于用户来说至关重要&#xff0c;特别是在面对大规模数据处理和高…

机房预约系统(个人学习笔记黑马学习)

1、机房预约系统需求 1.1系统简介 学校现有几个规格不同的机房&#xff0c;由于使用时经常出现“撞车“现象,现开发一套机房预约系统&#xff0c;解决这一问题。 1.2身份简介 分别有三种身份使用该程序 学生代表:申请使用机房教师:审核学生的预约申请管理员:给学生、教师创建账…

用Jmeter对数据库执行压力测试

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

HarmonyOS—LocalStorage:页面级UI状态存储

LocalStorage是页面级的UI状态存储&#xff0c;通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。LocalStorage也可以在UIAbility实例内&#xff0c;在页面间共享状态。 本文仅介绍LocalStorage使用场景和相关的装饰器&#xff1a;LocalStorageProp和LocalS…

Redis之缓存雪崩问题解决方案

文章目录 一、书接上文二、介绍三、解决方案1. 锁2. 不同的过期时间3. 缓存预热和定时任务 一、书接上文 Redis之缓存穿透问题解决方案实践SpringBoot3Docker 二、介绍 缓存雪崩&#xff0c;指大量的缓存失效&#xff0c;大量的请求又同时落在数据库。主要的一种诱因是key设…

接口请求重试的8种方法

转载文章&#xff1a;https://blog.csdn.net/qq_34162294/article/details/134131439 文章目录 1.前言2.几种方法 2.1循环重试2.2 使用Spring Retry库 2.2.1 添加 Maven 依赖2.2.2 添加 EnableRetry 注解启用重试功能2.2.3 在需要重试的方法上添加 Retryable 注解2.2.4. 还可以…

寒心,成立 25 年的车企迎来了首次裁员

车企 随着春节假期结束&#xff0c;各行各业也正式复工&#xff0c;但车企却未能迎来属于它们的"新年新气象"。 早在年前&#xff08;12 月&#xff09;&#xff0c;就有新闻爆出&#xff0c;知名传统车企「广汽本田」为了加快转向电动车市场&#xff0c;宣布解雇中国…

洛谷 P1075 [NOIP2012 普及组] 质因数分解

参考代码and代码解读 #include<bits/stdc.h>//万能头文件 using namespace std; int main() { int n; cin>>n;//输入这个数 for (int i2;i<n;i)//用for循环查找最小的因数 if (n%i0)//如果i是n的因数 { cout<<n/i…

如何在STM32微控制器中使用外部SDRAM

如何在STM32微控制器中使用外部SDRAM STM32微控制器因其卓越的性能、灵活的内存配置选项以及广泛的应用领域而受到工程师们的青睐。在许多高级应用中&#xff0c;如图像处理、大数据分析和复杂算法运算&#xff0c;内部存储资源可能不足以满足需求。这时&#xff0c;通过添加外…

Centos安装图形化桌面环境

1.使用root远程登录最小化安装的虚拟机 2.执行命令yum groupinstall "X Window System" 这是安装窗口系统 3.执行命令yum grouplist" 检查安装的软件可可以安装的软件 4.执行命令yum groupinstall "Server with GUI" 这是安装图形化界面 5.执行命令sy…

C#写的一个计算DCI-P3色域和SRGB的小工具

文章最后附带分享链接与提取码 方便需要测试屏幕的小伙伴&#xff0c;只需要输入RGB就能得到覆盖率与比率&#xff0c;W计算色温&#xff0c;不测也要写上&#xff0c;不然会报错 链接&#xff1a;https://pan.baidu.com/s/1wdmAwmwiXjNvn1tGsvy0HA 提取码&#xff1a;1234

NAS系统折腾记 | 黑群晖系统快速制作英特尔核显补丁支持硬解

常见的群晖机器&#xff0c;例如 DS920&#xff0c;DS918&#xff0c;系统内核一直是 4.4 的&#xff0c;而这个内核自带的核显驱动最高支持到 9 代&#xff0c;支持的CPU型号分别是J3455&#xff08;DS918&#xff09;和J4155&#xff08;DS920&#xff09;。而目前DIY搭建NAS…

BioTech - 大型蛋白质复合物的组装流程 (CombFold)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/136187314 CombFold是用于预测大型蛋白质复合物结构的组合和分层组装算法&#xff0c;利用AlphaFold2预测的亚基之间的成对相互作用。CombFold的组…

golang实现图片上传

实现个图片上传&#xff0c;记录一下 我这里是采用的调试工具&#xff0c;apipost去直接上传的&#xff0c;参数值选择file即可 上传的图片&#xff0c;两种方式&#xff0c;一是用原来的文件名&#xff0c;直接file.Filename即可。 func Upload(c *gin.Context) {file, _ : …

基于SSM实现的人事管理系统(源代码+数据库脚本)

文章目录 系统介绍技术选型成果展示账号地址及其他说明源码获取 系统介绍 系统演示 微信视频号&#xff1a;【全栈小白】查看视频 基于SSM实现的人事管理系统使用JavaEE开发&#xff0c;基于SpringMVCMybatis框架&#xff0c;该项目包含了用户管理、部门管理、职位管理、员工…

为什么在MOS管开关电路设计中使用三极管容易烧坏?

MOS管作为一种常用的开关元件&#xff0c;具有低导通电阻、高开关速度和低功耗等优点&#xff0c;因此在许多电子设备中广泛应用。然而&#xff0c;在一些特殊情况下&#xff0c;我们需要在MOS管控制电路中加入三极管来实现一些特殊功能。然而&#xff0c;不同于MOS管&#xff…

Sora:视频生成模型作为世界模拟器

我们探索了视频数据上生成模型的大规模训练。具体来说&#xff0c;我们在可变持续时间、分辨率和长宽比的视频和图像上联合训练文本条件扩散模型。我们利用了一个在视频和图像潜在码的时空块上操作的变压器架构。我们规模最大的模型 Sora 能够生成一分钟的高保真视频。我们的结…

mybitsPlus乐观锁@Version案例测试,发现有失效的情况

mybitsPlus乐观锁Version案例测试&#xff0c;发现有失效的情况 一、案例 Data TableName("NEWTABLE_TEST") ApiModel(value "BusBalance对象", description "额度表") public class NewTableTest {private static final long serialVersion…

Servlet中的请求与响应

Request和Response 1.Request和Response的概述2.Request对象2.1 Request继承体系2.2 Request获取请求数据2.3 解决post请求乱码问题 *2.4 Request请求转发(-&#xff0c;*)2.5 request的生命周期 3.HTTP响应详解(理解)1.使用抓包查看响应报文协议内容2.HTTP响应报文协议介绍 4.…