JavaScript篇.day08-DOM,节点,事件,定时器,位置及坐标

news2024/9/23 13:29:38

目录

1.DOM

2.DOM相关操作

(1)获取元素

(2)操作元素

(3)操作元素属性

(4)操作元素类名

(5)操作元素样式

3.节点操作

4.事件

5.事件传播

6.定时器

7.位置及坐标


1.DOM

  • Document Object Model 文档对象模型
  • 一整套操作文档流相关内容的属性和方法
  • 可以做的操作: 修改样式  修改属性  改变位置 添加事件

2.DOM相关操作

(1)获取元素

  • 通过id获取 document.getElementById('id名')
  • 通过类名获取: document.getElementsByClassName('类名') 获取到是一个数组
  • 通过标签类型获取: document.getElementsByTagName('标签名)
  • 通过选择器获取:  一个: document.querySelector('选择器')   多个:querySelectorAll (获取到是一个数组)

(2)操作元素

  • 文本内容(标签中的内容): innerText
  • 超文本内容(包含标签): innerHTML

(3)操作元素属性

  • 获取原生属性:    e.g:可直接获取 id, 但name和class不可(保留字)
  • 获取自定义属性:   getAttribute('属性名')
  • 设置自定义属性: setAttribute('属性名', '属性值')
  • 移除自定义属性: removeAttribute('属性名')
  • H5自定义属性(data-属性名)获取: dataset.属性名/ dataset['属性名']  多个-连接使用小驼峰式命名规则取

(4)操作元素类名

  • 修改:  ele.className = '修改后类名'
  • 移除: ele.className = ""

(5)操作元素样式

  • 获取行内样式: ele.style.样式名 (小驼峰)
  • 修改行内样式: ele.style.样式名 (小驼峰) = '修改后的值'   (行内样式优先级最高)
  • 获取非行内样式: window.getComputedStyle(ele).样式名(小驼峰)
<ul>
    <li id="apple" class="qqqq">apple</li>
    <li class="orange">orange1</li>
    <li class="orange">orange2</li>
    <li>pear</li>
    <li id="peach" class="peach">peach</li>
  </ul>
  <ol >
    <li class="oli">ollll</li>
  </ol>
  <div class="div1" style="background-color: antiquewhite;">div1</div>
  <div id="divId2" class="divCls2" style="background-color: antiquewhite;">div2</div>
  <div id="divId3"  data-index="index3"  data-list-name="divList"  class="" style="background-color: antiquewhite;">div2</div>
  <script>
    /* DOM  Document Object Model 文档对象模型
        一整套操作文档流相关内容的属性和方法
        可以做的操作: 修改样式  修改属性  改变位置 添加事件
    */
    // DOM操作步骤
    // 1. 获取元素
    // (1)通过id获取, id唯一   document.getElementById('ID名')
    var eleApple = document.getElementById('apple')
    console.log(eleApple);  //<li id="apple">...</li>
    // (2)通过class类名获取, 可获取一类   document.getElementsByClassName('类名')  返回数组
    var elesOrange = document.getElementsByClassName('orange')   
    console.log(elesOrange);  //HTMLCollection(2) [li.orange, li.orange]zi
    // (3)通过标签名获取 document.getElementsByTagName('标签')  返回数组
    var elesLi = document.getElementsByTagName('li')
    console.log(elesLi);  //HTMLCollection(5) [li#apple, li.orange, li.orange, li, li, apple: li#apple]
    // (4)通过选择器获取  获取到第一个document.querySelector('选择器')    获取到所有该选择元素document.querySelectorAll('选择器')
    var elesSel = document.querySelector('li.orange')
    console.log(elesSel);
    var elesSelAll = document.querySelectorAll('ul li')
    console.log(elesSelAll);

    // 2. 操作元素
    // (1) 操作文本内容(标签中文本内容)  innerText
    eleApple.innerText = '苹果'
    // (2) 操作超文本内容(标签及文本内容)
    var div1 = document.getElementsByClassName('div1')
    div1[0].innerHTML = "<a href='#'>111div111</a>"   //类名获取元素, 返回数组, 故div1[0]

    // 3. 操作元素属性
    // (1) 获取原生属性  可直接获取 id     但name和class不可
    var div2 = document.getElementById('divId2')
    console.log(div2.id);   // divId2
    // (2) 获取自定义属性  getAttribute('属性名')
    console.log(div2.getAttribute('class'));  //divCls2
    // (3) 设置自定义属性 setAttribute('属性名', '属性值')
    div2.setAttribute('class','div2222');
    console.log(div2.className);  //div2222
    // (4) 移除自定义属性 removeAttribute('属性名')
    div2.removeAttribute('class')
    console.log(div2.className); // <empty string> 空字符串
    // (5) H5新增  自定义属性    data-开头的属性名    dataset.  / dataset[' ']   ie11才开始支持
    var div3 = document.getElementById('divId3')
    console.log(div3.dataset.index);  // index3
    console.log(div3.dataset['index']); // index3
    console.log(div3.dataset.listName); // divList     多个-连接的属性名, 获取时采用小驼峰式命名规则
    
    // 4. 操作元素类名 className
    var peach = document.getElementById('peach')
    // (1) 修改元素类名
    peach.className = 'peach_className'
    // (2) 移除元素类名
    peach.className = ""   //  标签显示 class=""

    // 5. 操作元素样式
    // (1) 操作行内样式
    //  获取样式
    console.log(div2.style.backgroundColor);  //antiquewhite
    //  修改样式
    console.log(div2.style.backgroundColor = 'blue');  //blue
    // (2) 获取非行内样式
    console.log(window.getComputedStyle(div2).fontSize);   //20px
  </script>

3.节点操作

  • 创建节点: createElement(' ')
  • 追加节点: appendChild(ele)
  • 添加至指定节点之前: 父.insertBefore('子')
  • 移除子节点: removeChild(ele)
  • 移除本节点: remove()
  • 克隆节点: cloneNode()  默认false(只克隆该节点), true包含所有子节点
<ul>
    <li>我是原生第1个li</li>
    <li class="pre">我是原生第2个li------className:pre  </li>
  </ul>
  <script>
    var ulEle = document.querySelector('ul')
    var preLi = document.getElementsByClassName('pre')[0]   

    // 操作节点
    // 1. 创建节点   createElement
    var li1 = document.createElement('li')
    // 设置属性
    li1.setAttribute('id','myLi')
    li1.innerText = '我是创建的节点------myLi1---追加的'

    // 2. 追加节点   appendChild()
    ulEle.appendChild(li1)

    // 3. 在某个节点的子节点前添加   insertBefore()  将一个节点添加到父节点的指定子节点前面
    var li2 = document.createElement('li')
    li2.innerText = '我是创建的节点------myLi2---添加到指定节点之前的'
    ulEle.insertBefore(li2,ulEle.children[0])

    // 5. 移除子节点   removeChild()      remove()移除节点本身
    ulEle.removeChild(li1)
    li2.remove()
    // 6. 克隆节点   cloneNode(true)  true:所有子节点都克隆, false只克隆该节点本身,不可隆子节点
    var ulEle2 = ulEle.cloneNode(true)
    console.log(ulEle2);
  </script>

4.事件

事件: 用户触发指定行为(代码与页面内容的一个约定)

事件绑定三要素:

  • 事件源(谁):  和谁绑定,
  • 事件类型:  约定一个行为
  • 事件处理函数:  触发行为时,执行的代码

语法:

  •  方式1: 事件源上添加事件类型   <button οnclick="事件处理函数"></button>
  • 方式2: 获取事件源后,再绑定事件    btn.on事件名 = function(){ }
  • 方式3: 获取事件源后,再事件监听  btn.addEventLister('事件名', function(){ }, )

事件对象(e/event): 浏览器记录 , 当事件触发时, 一个描述该事件信息的对象数据类型

    var btn = document.querySelector('button')
    btn.addEventListener('click',clickMe(e))
    function clickMe(e){
      console.log(e);
    }

5.事件传播

三个阶段:

  • 捕获阶段: 沿DOM树从上往下 e.g:window ->document-> html -> body -> div.father -> div.son -> btn
  • 目标阶段: 目标盒子
  • 冒泡阶段: 沿DOM树从下往上 e.g: btn -> div.son ->  div.father ->  body ->  html -> document-> window

阻止冒泡: e.stopPropagation()

事件委托: e.target对象, 自身不做事件处理,交给父级来做

  <div class="father">
    <div class="son">
      <button class="btn">点点点</button>
    </div>
  </div>
  <script>
    var father = document.querySelector('.father')
    var son = document.querySelector('.son')
    var btn = document.querySelector('.btn')
    // 事件委托   将btn的工作委托给父级son
    son.onclick = function(e){
      e.stopPropagation()  // 阻止冒泡, 否则点击btn会弹出father
      if(e.target.className === 'btn'){ 
        alert('btn1')
      }
    }
    father.onclick = function(e){
        alert('father')
    }
  </script>

6.定时器

  • setInterval(函数, 毫秒数)    每隔多少毫秒执行一次(重复执行)
  • setTimeout(函数, 毫秒数)     隔多少秒后执行一次  (只执行一次)
  • clearInterval(定时器)    清除定时器
    window.setInterval(function(){
      console.log('1');
    },1000)
  
    var time2 = window.setTimeout(function(){
      console.log('2');
    },2000)
    // 清除定时器
    window.clearInterval(time2)

7.位置及坐标

 <!-- div {  margin: 400px; padding: 20px; width: 100px; height: 100px; border: 20px solid rgb(250, 131, 131); background-color: rgb(246, 186, 186); } -->
    <div></div>
    <script>
      var div = document.querySelector('div')
      // BOM中
      // 获取可视区域宽/高  window.innerWidth / window.innerHeight
      console.log(window.innerWidth)
      console.log(window.innerHeight)
      // 获取卷去的宽/高  document.documentElement.scrollTop || document.body.scrollTop

      // DOM中
      // 获取元素尺寸
      // offsetHeight / offsetWidth (元素内容 + padding + border)相当于IE模型
      console.log(div.offsetHeight) // 180
      console.log(div.offsetWidth) //  180
      // clientHeight / clientWidth    (元素内容 + padding)
      console.log(div.clientHeight) // 140
      console.log(div.clientWidth) // 140
      console.log(div.clientLeft) // 20    内容距离左边的尺寸
      console.log(div.clientTop) // 20     内容距离上边的尺寸

      // 事件对象内部信息
      // 鼠标事件    e事件对象
      div.onclick = function (e) {  
        // offsetX / offsetY   鼠标相对于触发事件元素的偏移量
        console.log(e.offsetX)
        // clientX / clientY   鼠标相对于浏览器可视窗口的偏移量  即使有滚动条,也是相对于可视窗口
        console.log(e.clientX)
        // pageX / pageY  鼠标相对于文档流的偏移量
        console.log(e.pageX)
        // screenX / screenY  鼠标相对于电脑屏幕的偏移量
        console.log(e.screenX)
      }

PreviousNotes:

JS.2-DOM,事件高级_Mteee.的博客-CSDN博客

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

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

相关文章

前端框架搭建(六)搭建页面框架【vite】

1.安装所需依赖 需要安装 vue-routernaive视图框架 npm npm install vue-router4 yarn yarn add vue-router4npm i -D naive-ui2.搭建naive适配框架 创建文件夹——存放通用组件 在components下创建文件夹common 全局配置常用组件 在之前创建的global.d.ts中添加Window…

枚举的应用

枚举&#xff1a; 在数学和计算机科学理论中&#xff0c;一个集的枚举是列出某些有穷序列集的所有成员的程序&#xff0c;或者是一种特定类型对象的计数。这两种类型经常&#xff08;但不总是&#xff09;重叠。 [1] 是一个被命名的整型常数的集合&#xff0c;枚举在日常生活…

基于CAS操作的atomic原子类型

原子操作 C A S (compare And Swap&#xff09;也叫比较交换&#xff0c;是一种无锁原子算法&#xff0c;映射到操作系统就是一条cmpxchg硬件汇编指令&#xff08;保证原子性)&#xff0c;其作用是让CPU将内存值更新为新值&#xff0c;但是有个条件&#xff0c;内存值必须与期望…

站长权重在线查询,怎么查询网站权重是多少?

什么是网站权重 当站长们辛辛苦苦建立起来一个网站&#xff0c;怎么才能知道自己的网站在搜索引擎中的权重情况呢&#xff1f; 对于很多人而言&#xff0c;权重这个词可能听到最多的场景就是淘宝京东店铺权重。淘宝或京东会根据商家网店的浏览量、好评率、转化率、是否…

4A(统一安全管控平台)解析

4A是指帐号&#xff08;Account&#xff09;、认证&#xff08;Authentication&#xff09;、授权&#xff08;Authorization&#xff09;和审计&#xff08;Audit&#xff09;&#xff0c;4A统一安全管控平台是以身份为中心&#xff0c;实现帐号、认证、授权和审计统一管控的安…

Spark注意事项

一、Spark理解 数据的操作只有两种 大数据领域中对数据的操作只有两种:聚合 & 处理 无论是多华丽算法,最终都是这两个平平无奇的操作组合而成的 action理解 在spark中,一个action操作为一个jobId(在源码中可以看到runjob 是只有在action操作后才会调用) , 所以一个…

Mac内存空间不足导致无法安装Ventura?可用这些方法释放储存空间

安装Macos新版系统Ventura需要非常多的内存空间&#xff0c;本身我们的Mac磁盘空间就掣襟肘见&#xff0c;我们又该如何释放Mac磁盘空间来安装Ventura呢&#xff1f;今日&#xff0c;小编将分享一些能够释放大量Mac内存空间的方法&#xff0c;以便大家能够优化Mac的运行速度外还…

摄影基础笔记

https://www.icourse163.org/learn/UESTC-1001958013?tid1450439527#/learn/content 这里写目录标题景深 焦距 光圈视角快门测光 感光度构图井字曝光色温白平衡光光的强度光的方向色彩色相明度饱和度色相环反差影调手机瞬间后期处理景深 焦距 光圈 当我们把镜头对着一个景物聚…

Annoconda常见用法

打开conda命令行窗口 点击开始&#xff0c;选择A-选择Anaconda里面的prompt 查看环境 conda env list #查看虚拟环境 创建环境 conda create -n 虚拟环境名字 python3.8 #创建虚拟环境 python3.8 指定python版本 激活环境 conda activate 虚拟环境名字 #进入虚拟环境 …

Linux磁盘情况常用查看指令

Linux磁盘情况 磁盘查询 df -h&#xff1a;(disk free)查询磁盘的整体情况。 du -h&#xff1a;(disk usage)查询指定目录的磁盘占用情况&#xff0c;默认为当前目录 -s 指定目录占用大小汇总-h 带计量单位-a 含文件–max-depth1 子目录深度-c 列出明细的同时&#xff0c;增…

【LDF】线性判别函数(二)

感知准则函数 线性可分性 现有 nnn 个 样本: y1,y2,…,yn\mathbf{y}_1, \mathbf{y}_2, \ldots, \mathbf{y}_ny1​,y2​,…,yn​, 这些样本来自于两个类别 ω1\omega_1ω1​ 或 ω2\omega_2ω2​ 。任务: 寻找一个线性判别函数 g(x)aTyg(\mathbf{x})\mathbf{a}^T \mathbf{y}g(…

SpringMVC 入门案例

1.1 添加依赖 在pom文件中添加 javax.servlet-api 和 spring-webmvc 依赖&#xff1b; javax.servlet-api&#xff1a;主要用于 JAVA Web 开发&#xff1b; spring-webmvc&#xff1a;SpringMVC 依赖&#xff1b; <dependencies><dependency><groupId>javax.…

Xilinx ZYNQ 7000 AXI GPIO 读写/中断

打开SDK 后&#xff0c;创建官方例程 打开官方例程后&#xff0c;会发现这个AXI GPIO设置和 PS MIO/EMIO一模一样 int main(void) {int Status;volatile int Delay;/* Initialize the GPIO driver */Status XGpio_Initialize(&Gpio, GPIO_EXAMPLE_DEVICE_ID);if (Status…

unity-概念与实操入门

文章目录编译器推荐&#xff08;Rider&#xff09;坐标世界坐标系相对坐标系资源商店快捷入口地面制作脚本新建脚本生命周期vs测试打印对象标签&#xff08;自带集合属性&#xff09;图层预设体创建预设体&#xff08;cocos相同&#xff09;定位预设体文件位置预设体添加、更新…

python第一次作业

目录 1.下列程序运行结果为&#xff1a; 2.下列程序运行结果为&#xff1a; 3.下列程序运行结果为&#xff1a; 4.下列程序运行结果为&#xff1a; 5.编写程序&#xff1a;从键盘输入两个两位数&#xff0c;组成一个新的四位数&#xff0c; 6.编写程序功能如下&#xff1a…

网络编程套接字----TCP协议

文章目录前言一、简单TCP网络程序二、TCP socket API 详解socket()bind()listen()accept()connect()三、TCP网络编程头文件日志文件客户端服务器单进程版本多进程版本多线程版本四、线程池版的TCP更改提供的服务总结前言 接着上节课我们讲了udp套接字网络编程,这节课我来给大家…

【C++基础】11:文件操作

文件操作 OVERVIEW文件操作一、文本文件&#xff1a;1.指定打开方式&#xff1a;2.文本文件的写操作&#xff1a;3.文本文件的读操作&#xff1a;二、二进制文件&#xff1a;1.二进制文件的写操作&#xff1a;2.二进制文件的读操作&#xff1a;程序运行时产生的数据都属于临时的…

JAVA设计模式--行为型模式--状态模式

1.状态模式&#xff08;State Pattern&#xff09; 1.1介绍 类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 在状态模式中&#xff0c;我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。 1.2意图&#xff1a; 允许对象在…

Python数据分析案例16——水质检测(支持向量机)

本次带来图片分类的案例&#xff0c;水质检测。 数据展示 五种类别的水质&#xff0c;图片形式储存的&#xff1a; 前面1是代表水质的类别标签&#xff0c;后面是样本个数。 图片特征构建 import numpy as np import pandas as pd import matplotlib.pyplot as plt import o…

pytorch应用(入门5)CNN卷积神经网络、提取层结构、提取参数

目录第一天第二章&#xff1a;简单的神经网络第三章&#xff1a;深度学习工作流程卷积模块介绍卷积池化层池化层书中的代码池化层相关资料提取 &#xff08;各&#xff09;层&#xff08;的&#xff09;结构如何提取参数及自定义初始化LeNetAlexNetVGGNetCIFAR 10VGGNetGoogLeN…