day10-Dom操作

2023-11-16

概述

DOM(文档对象模型)是一种用于处理HTML和XML文档的编程接口。它定义了一种表示文档的标准模型,使得可以通过编程方式访问和操作文档的内容、结构和样式。通过DOM,可以使用JavaScript等编程语言来访问和修改文档的结构和内容。可以通过DOM提供的方法和属性来查找、添加、删除和修改文档中的元素和属性,或者改变元素的样式和事件处理。在Web开发中,通过DOM可以实现动态地更新页面内容,响应用户的交互操作,以及实现各种功能和效果。
在这里插入图片描述浏览器中红色框的部分为上节介绍的Bom部分,网页的显示区域就是dom区域,也是我们需要编写操作的区域

1. 通过js获取页面上的元素

方法如下:
根据元素属性获取元素,2,3两种方式返回伪数组
1、根据id名来获取: document.getElementById(id名)
2、根据类名来获取: document.getElementsByClassName(类名)
3、根据标签名来获取:document.getElementsByTagName(标签名)
根据css选择器获取, 2 会返回伪数组
1、通过选择器获取,只会匹配第一个: document.querySelector(css选择器)
2、通过选择器获取,获取所有的: document.querySelectorAll(css选择器)

html结构1

<style>
        ul{
            list-style: none;
        }
</style>
<div class="box">
        <ul id="list">
            <li>1</li>
            <li>2</li>
            <li>3</li>
        </ul>
        <p id="first">这是p标签</p>
        <p class="text">这是class为text的p标签</p>
    </div>
        var ul = document.getElementById("first")
        var box = document.getElementsByClassName("box")
        var p  = document.getElementsByTagName('li')
        console.log(ul)
        console.log(box)
        console.log(p)
        console.log('-------------------')
        var p_first = document.querySelector('#first')
        var li_first = document.querySelector('li')
        var li = document.querySelectorAll('li')
        console.log(p_first)
        console.log(li_first)  // 指挥获取第一个
        console.log(li)

2. 操作元素

2.1 操作元素的样式

方法如下:
1、设置元素的样式, 通过js给元素设置的样式都是行内样式
元素.style.css属性名 = css属性值
2、 获取元素的样式
元素.style.css属性名
getComputedStyle(元素).css属性名

以上述‘html结构1’的结构为例, 操作页面元素样式。

		// 将box的背景通过操作dom元素变为黄色
        var box = document.querySelector('.box')
        box.style.backgroundColor = 'yellow'
        // 将css样式的 -去掉, 驼峰命名法书写
        // 比如 background-color -> backgroundColor
        console.log(box.style.backgroundColor)
        console.log(getComputedStyle(box).backgroundColor)

2.2 操作元素的类名

1、获取元素的类名
  元素.className
  元素.classList.value
2、设置元素的类名(会覆盖原有的类名)
  元素.className = 类名
  元素.classList.value = 类名
3、新增类名()
  元素.classList.add(类名)
4、 删除类名
   元素.classList.remove(类名)
5、判断有没有类名
   元素.classList.contains(类名)
以上述‘html结构1’的结构为例, 操作页面元素样式。
首先先写一个类名为active的css,待会通过操作类名给元素添加样式

    <style> 
        ul{
            list-style: none;
        }
        .active{
            background-color: red;
        }
    </style>
	    var li_first = document.querySelector('ul li:first-child')
	    // 添加一个类名
        li_first.classList.add('active')
        console.log(li_first.className)
	 	// 移除一个类名
        li_first.classList.remove('active')
        console.log(li_first.className)

2.3 操作元素属性

1、 原生属性
元素有本身带有的一些属性,例如:img标签的src、 input标签的value
2、data- 属性
我们可以给元素添加一个以data-开头 自己定义的属性: 例如 data-age=18 js会将data- 后面的age当作key存储, 18当作对应的值存储。我们一个访问这个自定义的属性。
以上述‘html结构1’的结构为例,更改一些属性

<div class="box">
        <ul id="list">
            <li>1</li>
            <li>2</li>
            <!-- 添加一个data-属性 -->
            <li data-index="3">3</li>
        </ul>
        <p id="first">这是p标签</p>
        <p class="text">这是class为text的p标签</p>
    </div>
var img = document.querySelector('img')
        img.src = 'https://img1.baidu.com/it/u=1919509102,1927615551&fm=253&fmt=auto&app=120&f=JPEG?w=889&h=500'
        var liArr = document.querySelectorAll('ul li')
        // 获取
        console.log(liArr[2].dataset.index)
        // 设置
        liArr[2].dataset.index = 999
        console.log(liArr[2].dataset.index)

2.4 操作元素的内容

1、元素.innerHTML
2、元素.innerText
以上述‘html结构1’的结构为例

        var p1 = document.querySelector('#first')
        var p2 = document.querySelector('.text')
        console.log(p1.innerHTML, p1.innerText)
        console.log(p2.innerHTML, p2.innerText)
        p1.innerHTML = '<p style="background-color:red">这是一个新的标签,innerHTML可以解析标签<p>'
        p2.innerText = '<p style="background-color:red">这是一个新的标签,innerText并不能解析标签<p>'
        console.log(p1.innerHTML, p1.innerText)
        console.log(p2.innerHTML, p2.innerText)

2.5 获取元素在dom中的一些信息

1、 获取元素的尺寸
真实的宽度、 真实的高度
- 元素.offsetWidth
- 元素.clientWidth
- 元素.offsetHeight
- 元素.clientHeight
2、获取元素的偏移
偏移:元素左上角点相对于页面左上角点的距离就是偏移
元素的偏移距离是有两个方向的 一个是距离页面左边的偏移 一个是距离页面上边的偏移
左边的偏移量
- 元素.offsetLeft
上边的偏移量
- 元素.offsetTop
-
3、获取元素左边框和上边框的宽度
左边框宽度
- 元素.clientLeft
上边框宽度
- 元素.clientTop

3、利用js来生成、添加、删除、修改、克隆元素

  1. 生成: document.createElement(标签名)
  2. 添加:父元素.appendChild(子元素) | 父元素.insertBefore(新子元素, 旧子元素)
  3. 修改: 修改内容:见2.4 | 修改标签名:父元素.replaceChild(新元素, 旧元素)
  4. 删除:父元素.removeChild(子元素)
  5. 克隆:要克隆的元素.cloneNode() 只会克隆当前元素 | 要克隆的元素.cloneNode(true) 既会克隆当前元素 也会克隆子元素
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

day10-Dom操作 的相关文章

随机推荐

  • Qt CSV文件的创建,读写操作

    文章目录 一 CSV文件介绍 二 创建CSV文件 三 写入CSV文件 四 读取CSV文件 一 CSV文件介绍 逗号分隔值 Comma Separated Values CSV 有时也称为字符分隔值 因为分隔字符也可以不是逗号 其文件以纯文本
  • scala和spark的下载与安装

    简易安装scala和spark 一 安装scala 1 安装scala scala下载注意和jdk的版本号 下载地址 https www scala lang org download 2 上传到linux虚拟机里 可通过rz方式上传 上传
  • 量化交易是如何实现的?

    前面我们讲到 其实最简单的量化交易 就是定投 设置好标的 时间 金额 那么不需自己动手 就可以按照设置的策略进行定投 这就是量化交易的最初形态 那么 为了实现更加复杂一些的交易 比如说 选股 买卖点位的确定 追踪实时行情等 应该怎么去实现呢
  • Python_数据读取_读取单个csv文件和批量读取csv文件

    读取单个csv pd read csv 直接读取单个csv文件通过pd read csv 函数直接在指定路径进行文件读取 需要利用Pandas包 其中 1 路径前的r表示路径符号不转义 window操作系统下不再用调整 为 或 进行文件读取
  • spark dataframe 数据类型转换

    文章目录 1 spark sql数据类型 数字类型 日期类型 复杂类型 2 spark sql和scala数据类型对比 3 spark sql数据类型转换示例 代码 输出 1 spark sql数据类型 数字类型 ByteType 代表一个
  • 解决连接腾讯云Ubuntu服务器,使用Xshell和WinSCP无法直接用root用户登陆

    发现腾讯云服务器登入只能用ubuntu用户名登入 但是无法使用root登录 下面是解决方法 1 首先使用Xshell用ubuntu用户进入系统 输入命令 sudo passwd Enter new UNIX password 然后输入密码
  • 没有权限删除文件

    通过远程发版时 有可能会没有权限删除文件 如下解决方法 1 将user 用户切换root 用户 sudo su root 该方法不一定成功 因为有可能设置权限你不能切换 但成功以后一劳永逸 当方法1没有成功时 采用如下方法 2 将你所操作的
  • 网络请求-登录

    post请求的header中发送本地存储的token 校验服务器中是否存在
  • jsbridge原理_Hybrid App技术解析 -- 原理篇

    引言 随着 Web 技术和移动设备的快速发展 Hybrid 技术已经成为一种最主流最常见的方案 一套好的 Hybrid架构方案 能让 App 既能拥有极致的体验和性能 同时也能拥有 Web技术 灵活的开发模式 跨平台能力以及热更新机制 想想
  • FLatten Transformer 简化版Transformer

    今天在找论文时 看到一篇比较新奇的论文 在这里跟大家分享一下 希望可以给一些人提供一些思路 虽然现在Transformer 比较火 在分割上面也应用的比较多 但是我一直不喜欢用 其中一个原因是结构太复杂了 平时我主要用一个sel atten
  • Java正则工具类:字母数字下划线、数据库url校验等

    文章目录 前言 一 正则基础语法 二 正则工具类 总结 前言 本文内容观摩的是其他作者的代码 在基础上增加修改了一些 参考原文地址 java用正则表达式 提示 以下是本篇文章正文内容 下面案例可供参考 一 正则基础语法 字符 描述 匹配输入
  • RabbitMQ --- 惰性队列、MQ集群

    一 惰性队列 1 1 消息堆积问题 当生产者发送消息的速度超过了消费者处理消息的速度 就会导致队列中的消息堆积 直到队列存储消息达到上限 之后发送的消息就会成为死信 可能会被丢弃 这就是消息堆积问题 解决消息堆积有三种思路 增加更多消费者
  • Numpy中的转换成数组的array函数(更新中)

    今天给大家讲解一下图像处理和深度学习里面一个常用的函数array array的功能是接收一个多位置数 例如列表list 元 组tuple等 列表 list1 1 2 3 list2 1 2 3 list3 1 2 3 元组 tuple 1
  • 单片机串口时序与TTL电平

    串口是一个广义的概念 这是单讲单片机的串口UART 以及单片机的TTL电平 主要是记录一下自己忘了还能再看一下 1 TTL电平标准 输出 L lt 0 8V H gt 2 4V 输入 L lt 1 2V H gt 2 0V TTL器件输出低
  • VTK笔记-体绘制-vtkVolume

    体渲染 体渲染是一个用于描述3D数据渲染过程的术语 这里的3D数据是指其属性信息遍及3D空间 而不是一个在3D空间中的2D曲面 面渲染是对数据的表面或者一个抽取的轮廓进行渲染 是通过对面上的标量属性进行显示的 面渲染能显示其表面或者一个抽取
  • 常用数据结构与算法:二叉堆(binary heap)

    一 什么是二叉堆 二 二叉堆的实现 三 使用二叉堆的几个例子 一 什么是二叉堆 1 1 二叉堆简介 二叉堆故名思议是一种特殊的堆 二叉堆具有堆的性质 父节点的 键值 总是大于或等于 小于或等于 任何一个子节点的键值 二叉堆又具有二叉树的性质
  • vue 集成file-saver和xlsx 实现前端表格导出

    1 npm安装 npm install xlsx save npm install file saver save 2 创建export js import FileSaver from file saver import as XLSX
  • ntp时间同步软件_MES、SCADA项目中的时间同步—S7-1500和PC通过NTP进行时间同步

    写在面前 文中链接仅在微信公众号有效 大家好 我是小智 智能制造之家号主 前面我们在谈到MES SCADA项目的时候 更多的是从网络 从通讯协议 从数据采集方向去阐述 比如网络丢包 比如modbus TCP 比如S7 COMM 又比如网络冗
  • 踩坑之路(jpa的批量插入) Oracle

    今天做项目的一个需求 需要把其他地方的数据存储到本地数据里面 没想到一次踩了两个坑 因为需要保存的数据很大 而且每天都需要保存一次 第一次用的jpa的saveAll方法 测试了一遍 保存下来总共花了50分钟 老大看时间的太慢了 提醒了我一下
  • day10-Dom操作

    js Dom 概述 1 通过js获取页面上的元素 2 操作元素 2 1 操作元素的样式 2 2 操作元素的类名 2 3 操作元素属性 2 4 操作元素的内容 2 5 获取元素在dom中的一些信息 3 利用js来生成 添加 删除 修改 克隆元