Web APIs——节点操作

news2024/11/30 0:30:54

1、DOM节点

DOM节点:DOM树里每一个内容都称之为节点

节点类型:

  • 元素节点
    • 所有的标签 比如body、div
  • 属性节点
    • 所有的属性 比如 href
  • 文本节点
    • 所有的文本
  • 其他

2、查找节点

关闭二维码案例:

点击关闭按钮,关闭的是二维码的盒子,还要获取erweima盒子

思考:

  • 关闭按钮 和 erweima 是什么关系呢?
  • 父子关系
  • 所以,可以点击关闭按钮,直接关闭它的爸爸,就无需获取erweima元素了

节点关系:针对的找亲戚返回的都是对象

  • 父节点
  • 子节点
  • 兄弟节点

2.1 父节点查找

parentNode属性

返回最近一级的父节点 找不到返回为null

子元素.parentNode
<body>
    <div class="yeye">
        <div class="dad">
            <div class="baby">x</div>
        </div>
    </div>
    <script>
        const baby = document.querySelector('.baby')
        console.log(baby)  // 返回dom对象
        console.log(baby.parentNode)  // 返回dom对象
        console.log(baby.parentNode.parentNode) // 返回dom对象
    </script>
</body>

2.1.1 案例 关闭二维码案例 

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    .box {
      position: relative;
      width: 1000px;
      height: 200px;
      background-color: pink;
      margin: 100px auto;
      text-align: center;
      font-size: 50px;
      line-height: 200px;
      font-weight: 700;
    }

    .box1 {
      position: absolute;
      right: 20px;
      top: 10px;
      width: 20px;
      height: 20px;
      background-color: skyblue;
      text-align: center;
      line-height: 20px;
      font-size: 16px;
      cursor: pointer;
    }
  </style>
</head>

<body>
  <div class="box">
    我是广告
    <div class="box1">X</div>
  </div>
  <div class="box">
    我是广告
    <div class="box1">X</div>
  </div>
  <div class="box">
    我是广告
    <div class="box1">X</div>
  </div>
  <script>
    // // 1. 获取事件源
    // const box1 = document.querySelector('.box1')
    // // 2. 事件侦听
    // box1.addEventListener('click', function () {
    //   this.parentNode.style.display = 'none'
    // })

    // 1. 获取三个关闭按钮
    const closeBtn = document.querySelectorAll('.box1')
    for (let i = 0; i < closeBtn.length; i++) {
      closeBtn[i].addEventListener('click', function () {
        // 关闭我的爸爸 所以只关闭当前的父元素
        this.parentNode.style.display = 'none'
      })
    }
  </script>
</body>

</html>

2.2 子节点查找 

  • childNodes
    • 获得所有子节点、包括文本节点(空格、换行)、注释节点等
  • children属性(重点)
    • 仅获取所有元素节点
    • 返回的还是一个伪数组
  • 父元素.children
<body>
    <ul>
        <p>第一个段落</p>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
    </ul>
    <script>
        const ul = document.querySelector('ul') // ul
        console.log(ul.children) // 得到伪数组  选择的是 亲儿子
    </script>
</body>

2.3 兄弟节点的查找 

1.下一个兄弟节点

        nextElementSibling属性

2.上一个兄弟节点

        previousElementSibling属性

<body>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
    </ul>
    <script>
        const li2 = document.querySelector('ul li:nth-child(2)')
        console.log(li2.previousElementSibling) // 上一个兄弟
        console.log(li2.nextElementSibling) // 下一个兄弟
    </script>
</body>

3、增加节点

很多情况下,需要在页面中增加元素

        比如,点击发布按钮,可以新增一条信息

一般情况下,我们新增节点,按照如下操作:

  • 创建一个新的节点
  • 把创建的节点放入到指定的元素内部

特殊情况下,我们新增节点,按照如下操作:

  • 复制一个原有的节点
  • 把复制的节点放入到指定的元素内部

3.1 创建节点

即创造出一个新的网页元素,在添加到网页内,一般先创建节点,然后插入节点

创建元素节点方法:

    <script>
        const div = document.createElement('div')
        console.log(div)
    </script>

3.2 追加节点

要想在界面看到,还得插入到某个父元素中

插入到父元素的最后一个子元素:

<body>
    <ul>我是老大</ul>
    <script>
        // 1. 创建节点
        const ul = document.querySelector('ul')
        const li = document.createElement('li')
        li.innerHTML = '我是li'
        // 2. 追加节点,作为最后一个子元素
        ul.appendChild(li)
    </script>
</body>

插入到父元素中某个子元素的前面:

<body>
    <ul>
        <li>我是老大</li>
    </ul>
    <script>
        // 1. 创建节点
        const ul = document.querySelector('ul')
        const li = document.createElement('li')
        li.innerHTML = '我是li'
       
        // 2. 追加节点,插入到父元素中某个子元素的前面
        ul.insertBefore(li,ul.children[0])
    </script>
</body>

3.3 练习学车在线案例渲染 

分析:

①:准备好空的ul结构

②:根据数据的个数,创建一个新的空li

③:li里面添加内容img标题等

④:追加给ul

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>学车在线首页</title>
    <link rel="stylesheet" href="./css/style.css">
    <style>

    </style>
</head>

<body>

    <!-- 4. box核心内容区域开始 -->
    <div class="box w">
        <div class="box-hd">
            <h3>精品推荐</h3>
            <a href="#">查看全部</a>
        </div>
        <div class="box-bd">
            <ul class="clearfix">

            </ul>
        </div>
    </div>
    <script>
        // 1. 重构  
        let data = [
            {
                src: 'images/course01.png',
                title: 'Think PHP 5.0 博客系统实战项目演练',
                num: 1125
            },
            {
                src: 'images/course02.png',
                title: 'Android 网络动态图片加载实战',
                num: 357
            },
            {
                src: 'images/course03.png',
                title: 'Angular2 大前端商城实战项目演练',
                num: 22250
            },
            {
                src: 'images/course04.png',
                title: 'Android APP 实战项目演练',
                num: 389
            },
            {
                src: 'images/course05.png',
                title: 'UGUI 源码深度分析案例',
                num: 124
            },
            {
                src: 'images/course06.png',
                title: 'Kami2首页界面切换效果实战演练',
                num: 432
            },
            {
                src: 'images/course07.png',
                title: 'UNITY 从入门到精通实战案例',
                num: 888
            },
            {
                src: 'images/course08.png',
                title: 'Cocos 深度学习你不会错过的实战',
                num: 590
            },
        ]
        const ul = document.querySelector('.box-bd ul')
        // 1. 根据数据的个数,创建 对应的小li
        for (let i = 0; i < data.length; i++) {
            // 2. 创建新的小li
            const li = document.createElement('li')
            // 把内容给li
            li.innerHTML = `
                <a href="#">
                    <img src=${data[i].src} alt="">
                    <h4>
                        ${data[i].title}
                    </h4>
                    <div class="info">
                        <span>高级</span> • <span>${data[i].num}</span>人在学习
                    </div>
                </a>
            `
            // 3. ul追加小li
            ul.appendChild(li)
        }
    </script>
</body>

</html>

 3.4 克隆节点

cloneNode会克隆出一个跟原标签一样的元素,括号内传入布尔值

  • 若为true,则代表克隆时会包含后代节点一起克隆
  • 若为false,则代表克隆时不包含后代节点
  • 默认为false
<body>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>
    <script>
        const ul = document.querySelector('ul')
        //1. 克隆节点
        // const li1 = ul.children[0].cloneNode(true)
        // console.log(li1)
        // 2. 追加
        // ul.appendChild(li1)
        ul.appendChild(ul.children[0].cloneNode(true))
    </script>
</body>

4、删除节点

若一个节点在页面中已不需要时,可以删除它

在JavaScript原生DOM操作中,要删除元素必须通过父元素删除

语法:

注:

  • 如不存在父子关系则删除不成功
  • 删除节点和隐藏节点(display:none)有区别:隐藏节点还是存在的,但是删除,则从html中删除节点

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

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

相关文章

Maven系列第10篇:设计你自己的maven插件【高手必备】

Maven默认提供了很多插件&#xff0c;功能也非常强大&#xff0c;但是如果我们想自己开发一些插件&#xff0c;比如自定义一款自动打包并且发布到服务器然后重启服务器的插件&#xff1b;或者定义一款插件自动打包自动运行打包好的构件。各种好玩的东西只要你能想到&#xff0c…

Python中表单的处理

目录 1. 表单的基本概念 2. 使用Flask处理表单 3. 表单验证 4. 数据存储 5. 使用数据库存储表单数据 6. 安全性考虑 总结 当我们谈论Web开发时&#xff0c;表单处理是一个不可避免的话题。表单是Web应用程序中用户输入数据的界面&#xff0c;而处理这些数据则是后端开发…

从零开始制作一个割草机器人

项目背景 为啥要做一个割草机器人呢&#xff1f;&#xff08;个人因素&#xff1a;我梦想就是做一款人形机器人保护人类&#xff0c;解放人类&#xff09; 基础准备&#xff1a;我们公司本身做过高精度&#xff0c;基于高精度的技术扩展到农机自动化驾驶。目前可以实现AB线拖…

【qemu逃逸】BlizzardCTF2017-strng

前言 虚拟机用户名&#xff1a;ubuntu 密码&#xff1a;passw0rd 一道入门题&#xff0c;看下启动脚本&#xff1a; ./qemu-system-x86_64 \-m 1G \-device strng \-hda my-disk.img \-hdb my-seed.img \-nographic \-L pc-bios/ \-enable-kvm \-device e1000,netdevnet0 \…

微信自动回复有什么好处?怎么设置?

微信自动回复有什么好处&#xff1f; 首先&#xff0c;它可以帮助我们节省时间和精力。当我们无法立即回复消息时&#xff0c;自动回复可以及时告知对方我们的状况&#xff0c;避免对方的焦虑和不便。 其次&#xff0c;自动回复可以增强沟通效率。无论是工作还是个人生活中&a…

sqlsugar查询数据库下的所有表,批量修改表名字

查询数据库中的所有表 using SqlSugar;namespace 批量修改数据库表名 {internal class Program{static void Main(string[] args){SqlSugarClient sqlSugarClient new SqlSugarClient(new ConnectionConfig(){ConnectionString "Data Source(localdb)\\MSSQLLocalDB;In…

SSD-1B:Segmind的加速稳定扩散模型

Segmind 稳定扩散模型 (SSD-1B) 是稳定扩散 XL (SDXL) 缩小 50% 的精简版本&#xff0c;可提供 60% 的加速&#xff0c;同时保持高质量的文本到图像生成功能。 它已经过各种数据集的训练&#xff0c;包括 Grit 和 Midjourney scrap 数据&#xff0c;以增强其根据文本提示创建各…

Find My卡片|苹果Find My技术与卡片结合,智能防丢,全球定位

钱包是许多人正常生活必备的物品&#xff0c;如果丢失钱包&#xff0c;不仅是钱的损失&#xff0c;还因为丢失了证件和银行卡&#xff0c;导致我们需要话费大量时间去补办&#xff0c;造成生活的不便。如今防丢卡片的出现将减少这类问题的发生。 在智能化加持下&#xff0c;防丢…

Python库Requests的爬虫程序爬取视频通用模版

这是一个使用Python库Requests的爬虫程序&#xff0c;用于爬取网上的视频。代码必须使用以下代码&#xff1a;爬虫IP主机为duoip&#xff0c;爬虫IP端口为8000。 import requests proxy_host "duoip" proxy_port 8000 url "目标网站" headers {"U…

BI数据可视化报表开发教程,手把手教你做报表

在奥威BI数据可视化平台上&#xff0c;BI数据可视化报表有两种做法。一种是使用报表模板&#xff0c;极速开发报表&#xff1b;一种是从零开始一步一步&#xff0c;个性化开发报表。这两种报表开发在效率上会拉开一定距离&#xff0c;操作繁琐程度不一&#xff0c;但总体来看都…

DG双击后没有反应的解决办法

在Win 97 x64 上安装 DG 相关文件后使用正常&#xff0c; 但是换了一台电脑&#xff0c;注册运行使用后一次之后&#xff0c;再双击 图标没有反应&#xff0c;现将处理方法介绍如下&#xff1a; 【方法1&#xff1a;更名法】 找到“当前用户”目录&#xff0c;可以看到系统隐…

功率放大器功能及用途介绍

功率放大器是一种用于将输入信号的电压放大到更高水平的电子设备。它在各个领域中发挥着重要作用&#xff0c;包括音频、通信、测量和控制等应用。下面Aigtek安泰电子将详细介绍功率放大器的功能及其主要用途。 图&#xff1a;ATA-3000系列功率放大器 功率放大器的功能介绍&…

产品运营是做什么的?新手运营必读篇

产品运营是产品取得成功&#xff0c;实现产品的商业目标的重要支撑。产品运营岗位的专业能力要求庞杂&#xff0c;在岗或准备入坑人员应该如何巩固自身的知识/技能树&#xff1f; 本文将介绍产品运营相关的知识&#xff0c;希望能帮助你找到提升竞争力的思路&#xff01; 产品…

在分布式系统中实现数据一致性:发件箱模式

在分布式系统的错综复杂的编织中&#xff0c;尤其是在微服务架构内&#xff0c;可靠的消息传递和数据一致性的挑战无处不在且要求极高。发件箱模式&#xff0c;常被引用于微服务的独特领域内&#xff0c;从一个关键场景中浮现出来&#xff0c;确保本地数据库事务的原子性和发布…

vue+canvas实现横跨整个页面的动态的波浪线(贝塞尔曲线)

本来写这个特效 我打算用css实现的,结果是一波三折,我太难了,最终没能用css实现,转战了canvas来实现。来吧先看效果图 当然这个图的波浪高度、频率、位置、速度都是可调的,请根据自己的需求调整,如果你讲波浪什么的调大一下 还有有摆动的效果哦。 以下是完整代码 <…

SAP 获取GOS附件清单及URL数据方法

很久没有更新了&#xff0c;断更了快两个月了&#xff0c;最近准备软考考试&#xff0c;刚考完不知道这次能不能通过 回归正题 SAP中很多业务中都是可以上传附件或者是上传URL的路径的&#xff0c;上传附件长时间会占用SAP的空间&#xff0c;使用GOS大多数都是采用上传URL的方式…

【好书推荐】AI时代架构师修炼之道:ChatGPT让架构师插上翅膀

目录 前言 ChatGPT对架构师工作的帮助 快速理解和分析需求 提供代码建议和解决方案 辅助系统设计和优化 提高团队协作效率 如何使用ChatGPT提高架构师工作效率 了解用户需求和分析问题 编码实践和问题解决 系统设计和优化建议 团队协作和沟通效率提升 知识管理和文…

SOME/IP 协议介绍(一)

1. 引言和功能概述 本文档规定了可扩展面向服务基于IP的中间件&#xff08;SOME/IP&#xff09;——一种用于汽车/嵌入式RPC机制和底层序列化/传输格式的示例&#xff0c;作为由RTE调用的序列化器。 唯一有效的缩写是SOME/IP。其他缩写&#xff08;例如Some/IP&#xff09;是…

echarts有4个y轴,点击图例依次按顺序显示和隐藏

代码&#xff1a; <template><div><el-row class"actually" style"padding-top:10px;height: 420px;"><div style"font-size: 14px; font-weight: bold; margin: 0 10px 0 5px; display: inline-block">Cloud Usage<…

构建生成式AI应用:关键因素是什么?

原创 | 文 BFT机器人 生成式AI是一种基于机器学习和深度学习的技术&#xff0c;通过训练模型来生成新的内容&#xff0c;它可以通过学习现有的数据&#xff0c;理解其规律和特征&#xff0c;并生成与之类似的新内容&#xff0c;生成式AI在多个领域具有广泛的应用潜力。然而&am…