〖大前端 - 基础入门三大核心之JS篇㊱〗- JavaScript 的DOM节点操作

news2024/11/18 14:33:40
  • 说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费如需要项目实战或者是体系化资源,文末名片加V!
  • 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 从事过全栈研发、产品经理等工作,目前在公司担任研发部门CTO。
  • 荣誉:2022年度博客之星Top4、2023年度超级个体得主、谷歌与亚马逊开发者大会特约speaker全栈领域优质创作者

  • 🏆 白宝书系列
    • 🏅 启示录 - 攻城狮的自我修养
    • 🏅 Python全栈白宝书
    • 🏅 ChatGPT实践指南白宝书
    • 🏅 产品思维训练白宝书
    • 🏅 全域运营实战白宝书
    • 🏅 大前端全栈架构白宝书


文章目录

  • ⭐ 节点操作
    • 🌟 节点的创建、移除、克隆
      • ✨ 节点的创建
      • ✨ 节点创建操作实例
      • ✨ 节点的移动
      • ✨ 节点的删除
      • ✨ 节点的克隆

⭐ 节点操作

🌟 节点的创建、移除、克隆

✨ 节点的创建

document.createElement()方法用于创建一个指定tagname的HTML元素

但是新创建出来的节点是“孤儿节点”,它并没有被挂载到DOM树上,我们无法看见它

必须继续使用appendChild()insertBefore()方法将孤儿节点插入到DOM树上。

appendchild(),就是追加一个子节点的意思。任何已经在DOM树上的节点,都可以调用appendChild()方法,它可以将孤儿节点挂载到它的内部,成为它的最后一个子节点。

语法:父节点.appendChild(孤儿节点);

insertBefore(),就是在前方插入节点的意思。任何已经在DOM树上的节点,都可以调用insertBefore()方法,它可以将孤儿节点挂载到它的内部,成为它的“标杆子节点”之前的节点

语法:父节点.insertBefore(孤儿节点,标杆节点);

示例代码:

<body>
    <div id="box">
        <p>段落1</p>
        <p>段落2</p>
        <p>段落3</p>
    </div>
    <script>
        //定义节点变量,获取div标签
        var oBox = document.getElementById('box');
        //定义节点变量,获取p标签
        var oPs = oBox.getElementsByTagName('p');

        //创建一个孤儿节点p
        var oP = document.createElement('P');
        oP.innerHTML = '测试'  //修改孤儿节点的内容 
        oBox.appendChild(oP);  //上树--加到最后一个子节点
        
        //再创建一个孤儿节点p
        var oP1 = document.createElement('p');
        oP1.innerHTML = '插入标杆节点之前';  //修改孤儿节点的内容
        oBox.insertBefore(oP1, oPs[1]);  //上树--插入到编号为1的p标签之前
        
    </script>
</body>

image-20230401110924734

✨ 节点创建操作实例

题目一:请动态创建出一个20行12列的表格

题目分析:使用for循环语句,循环创建20次tr,循环内嵌套一个for循环,创建12次td

代码如下:

<body>
    <div id="box">

    </div>

    <script>
        //请动态创建出一个20行12列的表格
        var oBox = document.getElementById('box');

        //创建节点---table
        var oTable = document.createElement('table');
        oBox.appendChild(oTable);  //插入table标签

        //创建节点---tr
        for (var i = 1; i <= 20; i++) {
            var oTr = document.createElement('tr');
            oTable.appendChild(oTr);
            //创建节点---td
            for(var j = 1; j <= 12; j++) {
                var oTd = document.createElement('td');
                oTr.appendChild(oTd);
            }
        }
    </script>
</body>

image-20230401113342122

题目二:请制作九九乘法表(利用DOM节点操作)

题目分析:和上面的题目一样,创建表格,然后在表格里面修改内容,例如1*1=2…;需要注意的是九九乘法表不是一个方方正正的表格,而是每一行的列数都比前一行多一个,所以循环嵌套的时候,循环的次数要思考清楚

代码如下:

<body>
    <div id='box'></div>
    <script>
        //请制作九九乘法表(利用DOM节点操作)
        var oBox = document.getElementById('box');

        //创建节点---table
        var oTable = document.createElement('table');
        oBox.appendChild(oTable);

        //创建节点---tr
        for (var i = 1; i <= 9; i++) {
            var oTr = document.createElement('tr');
            oTable.appendChild(oTr);
            //创建节点---td
            for (var j = 1; j <= i; j++) {  //数以j的循环次数
                var oTd = document.createElement('td');
                oTd.innerHTML = j + '*' + i + '=' + i*j;  //填入内容
                oTr.appendChild(oTd);
            }
        }
    </script>
</body>

image-20230401115011271

✨ 节点的移动

如果将已经挂载到DOM树上的节点成为appendChild()或者insertBefore()的参数,这个节点将会被移动

语法:新父节点.appendChild(已经有父亲的节点);

语法:新父节点.insertBefore(已经有父亲的节点,标杆子节点);

这意味着一个节点不能同时位于DOM树的两个位置

示例代码:

appenChild()移动:

<body>
    <div id="box1">
        <p id="para">我是段落</p>
    </div>
    <div id="box2"></div>
    <script>
        //将#box1中的p标签移动到#box2中
        var box1 = document.getElementById('box1');
        var box2 = document.getElementById('box2');
        var para = document.getElementById('para');

        //用appendChild()移动
        box2.appendChild(para);
    </script>
</body>

image-20230401134113903

insertBefore()移动:

<body>
    <div id="box1">
        <p id="para">我是段落</p>
    </div>
    <div id="box2">
        <p>我是box2原有段落</p>
        <p>我是box2原有段落</p>
        <p>我是box2原有段落</p>
        <p>我是box2原有段落</p>
    </div>
    <script>
        //将#box1中的p标签移动到#box2中
        var box1 = document.getElementById('box1');
        var box2 = document.getElementById('box2');
        var para = document.getElementById('para');
        var ps_inbox2 = box2.getElementsByTagName('p');

        //用insertBefore()移动
        box2.insertBefore(para, ps_inbox2[0]);
    </script>
</body>

image-20230401134426194

✨ 节点的删除

removeChild()方法从DOM中删除一个子节点

语法:父节点.removeChild(要删除的子节点)

注意:节点不能主动删除自己,必须由父节点删除它

示例代码:

<body>
    <div id="box">
        <p>我是段落0</p>
        <p>我是段落1</p>
        <p>我是段落2</p>
    </div>
    <script>
        //删除#box里的第二个段落
        var box = document.getElementById('box');
        var ps = box.getElementsByTagName('p');

        box.removeChild(ps[1]);
    </script>
</body>

image-20230401135153417

✨ 节点的克隆

cloneNode()方法可以克隆节点,克隆出的节点是“孤儿节点”

语法:var 孤儿节点 = 老节点.cloneNode();

还可以往cloneNode()方法里传入参数一个布尔值参数表示是否采用深度克隆,传入true则深度克隆,该节点的所有后代节点都会被克隆;如果为false,则只克隆该节点本身。

语法:var 孤儿节点 = 老节点.cloneNode(true);

示例代码:

<body>
    <div id="box1">
        <ul>
            <li>python</li>
            <li>java</li>
            <li>c</li>
            <li>javascript</li>
        </ul>
    </div>
    <div id="box2"></div>
    <script>
        //将#box1中的列表克隆到box2中
        var box1 = document.getElementById('box1');
        var box2 = document.getElementById('box2');
        var ul_inbox1 = box1.getElementsByTagName('ul')[0];  //注意用getElementsByTagName得到的是一个数组,要用下标才能取到里面的值

        //克隆
        var ul = ul_inbox1.cloneNode();
        //上树
        box2.appendChild(ul);
    </script>
</body>

image-20230401143423595

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

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

相关文章

股票魔法师第二阶段趋势模板选股公式,寻找上涨趋势

对于股票运行的阶段&#xff0c;不同的股票分析方法有着不同的划分方式。从传统的主力运作分析&#xff0c;可以分为吸筹、洗盘、试盘、拉升、出货五个阶段。在波浪理论中&#xff0c;一个完整的上升或下降周期包含8浪&#xff08;其中5浪是主浪、3浪是调整浪&#xff09;。在缠…

Gdevops北京站 2023年全球敏捷运维峰会-核心PPT资料下载

一、峰会简介 2023 Gdevops全球敏捷运维峰会-北京站成功举办&#xff0c;一众产学研界技术大佬与新锐专家&#xff0c;以智能为主线&#xff0c;就数据库、运维、架构、金融科技等领域进行了前沿技术与实践经验交流&#xff0c;一同畅聊AIGC、云原生、数智化转型下的新机遇。 …

【LeetCode刷题-滑动窗口】--159.至多包含两个不同字符的最长子串

159.至多包含两个不同字符的最长子串 方法&#xff1a;滑动窗口 定义两个指针left和right作为窗口的边界&#xff0c;将两个指针都设定在位置0&#xff0c;然后向右移动right指针&#xff0c;直到窗口内不超过两个不同的字符&#xff0c;如果某一点我们得到了3个不同的字符&am…

市县镇一体化视频会议系统

随着网络技术的飞速发展&#xff0c;县市各部门建成了业务专用通信网络。利用专用通信网络&#xff0c;省一市-县基本上都开通了局域网视频会议系统。我们在市局各科室和各县局间建成了专网跨网段的视频会议系统。连通宝视频会议系统建设方案软硬一体&#xff0c;可实现多点间语…

基于STM32的蓝牙低功耗(BLE)通信方案设计与实现

蓝牙低功耗&#xff08;Bluetooth Low Energy&#xff0c;简称BLE&#xff09;是一种能够在低功耗环境下实现无线通信的技术。在物联网应用中&#xff0c;BLE被广泛应用于传感器数据采集、健康监测设备、智能家居等领域。本文将基于STM32微控制器&#xff0c;设计并实现一个简单…

⑧【MySQL】数据库查询:内连接、外连接、自连接、子查询、多表查询

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 内连接、外连接、自连接、子查询、多表查询 ⑧…

汽车ECU的虚拟化技术初探(三)--U2A虚拟化辅助功能分析1

目录 1.基本概述 1.1 U2A虚拟化辅助功能 1.2 U2A虚拟化使能和资源分配 2. U2A架构概述 3. CPU运行模式 3.1 虚拟化模式 3.2 限制运行模式 3.3 权限运行模式 3.4 CPU运行模式小结 4.小结 1.基本概述 1.1 U2A虚拟化辅助功能 在汽车ECU的虚拟化技术初探(二)-CSDN博客中…

MyBatis #{} 和 ${} 的区别

前言&#xff1a; #{} 和 ${} 的区别是 MyBatis 中一个常见的面试题&#xff0c;#{} 和 ${} 是MyBatis 中获取参数的两种方式&#xff0c;但我们在项目中大多数使用的都是 #{} 来获取参数&#xff0c;那么它们两个有什么区别呢&#xff1f; 区别 一. #{} 采用预编译 SQL&…

鸿蒙4.0开发笔记之DevEco Studio如何使用Previewer窗口预览器(一)

一、预览器作用 DevEco Studio预览器概况在HarmonyOS应用开发过程中&#xff0c;通过使用预览器&#xff0c;可以查看应用的UI效果&#xff0c;方便开发者实时查看应用的运行效果&#xff0c;随时调整代码。 二、打开Previewer预览器 1、正常启动 打开预览器的位置在DevEco…

Docker Swarm: 容器编排的力量和优势深度解析

文章目录 Docker Swarm的核心概念1. 节点&#xff08;Node&#xff09;2. 服务&#xff08;Service&#xff09;3. 栈&#xff08;Stack&#xff09; 使用Docker Swarm1. 初始化Swarm2. 加入节点3. 创建服务4. 扩展和缩减服务5. 管理栈6. 管理服务更新 Docker Swarm的优势深度解…

03.webpack中hash,chunkhash和contenthash 的区别

hash、contenthash 和 chunkhash 是通过散列函数处理之后&#xff0c;生成的一串字符&#xff0c;可用于区分文件。 作用&#xff1a;善用文件的哈希值&#xff0c;解决浏览器缓存导致的资源未及时更新的问题 1.文件名不带哈希值 const path require(path) const HtmlWebpac…

DMA原理和应用

目录 1.什么是DMA 2.DMA的意义 3.DMA搬运的数据和方式 4.DMA 控制器和通道 5.DMA通道的优先级 6.DMA传输方式 7.DMA应用 实验一: 内存到内存搬运 CubeMX配置&#xff1a; ​编辑用到的库函数&#xff1a; 代码实现思路&#xff1a; 实验二: 内存到外设搬运 CubeMX…

html-网站菜单-点击显示导航栏

一、效果图 1.点击显示菜单栏&#xff0c;点击x号关闭&#xff1b; 2.点击一级菜单&#xff0c;展开显示二级&#xff0c;并且加号变为减号&#xff1b; 3.点击其他一级导航&#xff0c;自动收起展开的导航。 二、代码实现 <!DOCTYPE html> <html><head>&…

Apache Doris (五十四): Doris Join类型 - Bucket Shuffle Join

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录

场景交互与场景漫游-osgGA库(5)

osgGA库 osgGA库是OSG的一个附加的工具库&#xff0c;它为用户提供各种事件处理及操作处理。通过osgGA库读者可以像控制Windows窗口一样来处理各种事件 osgGA的事件处理器主要由两大部分组成&#xff0c;即事件适配器和动作适配器。osgGA:GUIEventHandler类主要提供了窗口系统的…

swin unetr的3D语义分割

基于monai库。其实我不是很喜欢这种&#xff0c;可扩展性太差了&#xff0c;除非说你想快速在自己的数据集上出结果。但是它的transform可以对3d医学图像增强操作&#xff0c;比torch的transform强一点&#xff0c;因为它的数据增强输入是&#xff08;x,y,z&#xff09;h,w,d格…

竞赛 题目:基于机器视觉opencv的手势检测 手势识别 算法 - 深度学习 卷积神经网络 opencv python

文章目录 1 简介2 传统机器视觉的手势检测2.1 轮廓检测法2.2 算法结果2.3 整体代码实现2.3.1 算法流程 3 深度学习方法做手势识别3.1 经典的卷积神经网络3.2 YOLO系列3.3 SSD3.4 实现步骤3.4.1 数据集3.4.2 图像预处理3.4.3 构建卷积神经网络结构3.4.4 实验训练过程及结果 3.5 …

FPGA基础以太网

以太网数据通信 物理层&#xff1a;网线网卡&#xff08;PHY芯片&#xff09; 数据链路层&#xff1a;Mac层(数据有效传输&#xff09; 如图所示&#xff1a;FPGA中的Mac层中的MII接口负责控制PHY芯片&#xff0c;PHY芯片通过网线与PC端进行以太网数据传输。 FPGA中&#xff…

linux高级篇基础理论四(rsync,inotify,squid,KVM虚拟机)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️不能因为人生的道路坎坷,就使自己的身躯变得弯曲;不能因为生活的历程漫长,就使求索的 脚步迟缓。 ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xff1a;云计算技…

利用NVIDIA DALI读取视频帧

1. NVIDIA DALI简介 NVIDIA DALI全称是NVIDIA Data Loading Library&#xff0c;是一个用GPU加速的数据加载和预处理库&#xff0c;可用于图像、视频和语音数据的加载和处理&#xff0c;从而为深度学习的训练和推理加速。 NVIDIA DALI库的出发点是&#xff0c;深度学习应用中…