Dom节点继承树基本操作

 遍历节点树

基于元素节点树的遍历

  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;---添加到父节点的最后一个子节点
inserlBelare(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>

inserlBelare(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>

 


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>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

07 按键控制 LED

按键简介 按键开关是一种电子开关&#xff0c;属于电子元器件类。常见的按键开关有两种&#xff0c;第一种是轻触式按键开关&#xff08;简称轻触开关&#xff09;&#xff0c;使用时以向开关的操作方向施加压力使内部电路闭合接通&#xff0c;当撤销压力时开关断开&#xff0…

unity学习(22)——客户端与服务器合力完成注册功能(4)数据库化

单纯的账号密码这种非频繁读写&#xff0c;实现起来很简单的&#xff0c;游戏的属性信息到时候也许会比较麻烦。 思路&#xff1a;每次加入有新键值TryAdd&#xff0c;如果加入成功&#xff0c;直接重写账号密码文件即可。 C#JsonConvert.DeserializeObject反序列化与JsonCon…

15-55V输入自动升降压 光伏MPPT自动跟踪充电方案 大功率300瓦

1.MPPT原理--简介 MPPT&#xff0c;全称为Maximum Power Point Tracking&#xff0c;即最大功点跟踪&#xff0c;它是一种通过调节电气模块的工作状态&#xff0c;使光伏板能够输出更多电能的电气系统能够将太阳能电池板发出的直流电有效地贮存在蓄电池中&#xff0c;可有效地…

0205-2-数据链路层

第 3 章 数据链路层 使用点对点信道的数据链路层 数据链路和帧 数据链路层使用的信道主要有以下两种类型&#xff1a; 点对点信道。这种信道使用一对一的点对点通信方式。广播信道。这种信道使用一对多的广播通信方式&#xff0c;因此过程比较复杂。广播信道上连接的主机很多…

程序员金三银四跳槽指南:时间线经典面试16问

祝大家成功上岸&#xff0c;升职加薪&#xff0c;冲鸭 &#x1f389; 金三银四 今天复工&#xff0c;就要开始准备啦&#x1f4bc;✨ 把握好打工人跳槽的金三银四&#xff0c;获得满意的新工作 &#x1f389; 时间线 年后跳槽时间线&#xff0c;过完年刚好开始准备&#xf…

COMSOL Multiphysics在超材料与超表面仿真中的应用

随着科技的飞速发展&#xff0c;超材料和超表面作为新兴研究领域&#xff0c;吸引了广泛关注。它们通过人工设计的结构&#xff0c;能够在特定条件下表现出特殊的物理性质&#xff0c;为光电子领域带来革命性的变革。COMSOL Multiphysics作为一款强大的多物理场仿真软件&#x…

vue 实现docx文件在线预览

预览请求步骤&#xff1a; 准备一个需要预览的文件地址【如:https://usdoc.cn/vw/文件模板.docx】GET 参数到请求地址将拼接好的地址放在浏览器中&#xff0c;开始预览 请求地址&#xff1a;https://vw.usdoc.cn/ 请求方式&#xff1a;GET 请求参数: 字段名称字段类型必填参数…

WordPress主题YIA在广告位添加图片广告时下方有空白怎么办?

YIA主题设置中默认有4个广告位&#xff0c;而侧边栏的广告位由站长自行添加。boke112百科在这些广告位添加图片广告后发现图片下方有空白&#xff0c;导致下方的两个角没有变圆角&#xff0c;看起来也有点不好看。具体如下图所示&#xff1a; 其实&#xff0c;这个问题就是典型…

Spring Security基础学习

一、SpringSecurity框架简介 二、SpringSecurity入门案例 三、SpringSecurity Web权限方案 四、SpringSecurity微服务权限方案 五、SpringSecurity原理总结

Model / View结构

红色部分是可以直接使用的。 QFileSystemModel; QFileSystemModel的使用&#xff1a; 头文件&#xff1a; QFileSystemModel* model nullptr; cpp文件&#xff1a; model new QFileSystemModel; model->setRootPath(QDir::currentPath()); ui->listView->setModel…

微信小程序:实现微信小程序应用首页开发 (本地生活首页)

文章目录 小程序应用页面开发1、创建项目并配置项目目录结构配置导航栏效果三、配置 tabBar 效果四、轮播图实现4.1 创建轮播图数据容器4.2 定义一个请求轮播图数据的接口4.3 页面加载调用 数据请求接口 五、九宫格实现5.1 获取九宫格数据5.2 结构和样式的完善六、图片布局实现…

普中51单片机学习(九)

蜂鸣器 蜂鸣器简介 在单片机应用的设计上&#xff0c;很多方案都会用到蜂鸣器&#xff0c;大部分都是使用蜂鸣器来做提示或报警&#xff0c;比如按键按下、开始工作、工作结束或是故障等等。改变单片机引脚输出波形的频率&#xff0c;就可以调整控制蜂鸣器音调&#xff0c;产…

Qt的基本操作

文章目录 1. Qt Hello World 程序1.1 通过图形化界面的方式1.2 通过代码的方式实现 2. Qt 的编码问题3. 使用输入框实现hello world4. 使用按钮实现hello world5. Qt 编程注意事项6. 查询文档的方式7. 认识Qt坐标系 1. Qt Hello World 程序 1.1 通过图形化界面的方式 我们先讲…

Autosar --- CAN Driver标准解读

前言 本文是对Autosar文档的翻译与解读&#xff0c;通过对规范的理解&#xff0c;加上实际的应用来一一对应&#xff0c;方便大家更好的理解。 注意&#xff1a;本文并非完全的按照【AUTOSAR_SWS_CANDriver.pdf】来进行翻译的。文章内容的标题与【AUTOSAR_SWS_CANDriver.pdf】保…

记录setData报错TypeError: [object Array] is not a function

小程序调用setData控制台显示报错.但是功能正常 同样的各个地方调setData都报错,经过一轮排除法后发现是自定义组件写法有问题 修改正确之后就没问题了

精品jsp+ssm健身器材管理系统-教练开发与设计

《[含文档PPT源码等]精品jspssm健身管理系统开发与设计[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 使用技术&#xff1a; 开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&…

VUE3 中导入VISO 图形

微软的VISO是一个功能强大的图形设计工具&#xff0c;它能够绘制流程图&#xff0c;P&ID&#xff0c;UML 类图等工程设计中常用的图形。它要比其它图形设计软件要简单许多。以后我的博文中将更多地使用VISO 来绘制图形。之前我一直使用的是corelDraw。 VISO 已经在工程设计…

AbstractQueuedSynchronizer

重要类 Node Node中的属性&#xff1a;prev next 重要方法 这个方法主要有两种实现 一个是公平 一个是非公平 公平&#xff1a; /*** Fair version of tryAcquire. Dont grant access unless* recursive call or no waiters or is first.*/protected final boolean tryAcq…

IOC理解总结

IOC 控制反转&#xff08;Inversion of Control&#xff0c;缩写为IoC&#xff09;&#xff0c;是面向对象编程中的一种设计原则&#xff0c;可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09…

[深度学习] 卷积神经网络“卷“在哪里?

​ &#x1f308; 博客个人主页&#xff1a;Chris在Coding &#x1f3a5; 本文所属专栏&#xff1a;[深度学习] ❤️ 热门学习专栏&#xff1a;[Linux学习] ⏰ 我们仍在旅途 目录 1.卷积的定义 2.卷积的"卷"在哪里 3.什么又是卷积神…