【javascript】原生js对Dom节点的操作方法总结(一)

news/2024/4/25 14:04:55/文章来源:https://blog.csdn.net/qq_40591925/article/details/127083744

CSDN话题挑战赛第2期
参赛话题:学习笔记

*学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢?

目录

1.DOM提供给我们计算后的样式

2.快捷位置和尺寸

3.getBoundingClientRect获取相对于视口左上角的位置

4.监听滚动、浏览器获取滚动条高度、触底

  • 滚动距离
  • 滚动条高度
  • 监听滚动、触底
  • e.target与e.currentTarget区别详解

5.获取Dom节点上的属性(getAttribute,setAttribute)

6.DOM节点创建节点、添加节点、删除节点、复制节点、替换节点

  • 创建节点
  • 添加节点
  • 删除节点
  • 复制节点
  • 替换节点

7.判断节点类型

8.获取元素

  • 利用DOM提供的方法获取元素
  • 利用节点层级关系获取元素

9.节点关系及获取方式

10.innerHTML 、 innerText、outerhtml的区别

1.DOM提供给我们计算后的样式

var oDiv=document.getElementById(‘id’)

  • window.getComputedStyle(),该方法接收一个要进行样式计算的元素,并返回一个样式对象。
  • window.getComputedStyle(oDiv);//样式对象
  • window.getComputedStyle(oDiv).getPropertyValue(“width”)//获取宽度
  • 简写:window.getComputedStyle(oDiv)[‘width’]

getComputedStyle.getPropertyValue()IE6、7、8不兼容,因此需要单独使用

  • 它必须使用驼峰
  • oDiv.currentStyle.paddingLeft;
  • oDiv.currentStyle[“paddingLeft”];

总结:

function getAllComputedStyle(obj,property){      if(window.getComputedStyle){//现在要把用户输入的property中检测一下是不是驼峰,转为连字符写法//强制把用户输入的词儿里面的大写字母,变为小写字母加-//paddingLeft  →  padding-leftproperty = property.replace(/([A-Z])/g , function(match,$1){return "-" + $1.toLowerCase();});return window.getComputedStyle(obj)[property];}else{//IE只认识驼峰,我们要防止用户输入短横,要把短横改为大写字母//padding-left  → paddingLeft property = property.replace(/\-([a-z])/g , function(match,$1){return $1.toUpperCase();});return obj.currentStyle[property];}
}
var oDiv = document.getElementsById("id");
console.log(getAllComputedStyle(oDiv,"padding-left"));

2.快捷位置和尺寸

DOM已经提供给我们计算后的样式,但是还觉得不方便,所以DOM又提供给我们一些API:

ele.offsetLeft(距离自己最近的已经定位的元素左侧的距离)

ele.offsetTop (距离自己最近的已经定位的元素顶部的距离)

ele.offsetWidth (自己的width)

ele.offsetHeight (自己的width)

ele.clientWidth (自己的width+padding)

ele.clientHeight (自己的height+padding)


3.getBoundingClientRect获取相对于视口左上角的位置

  • document.getElementById(‘id’).getBoundingClientRect();

    // — 相对于视口左上角的位置,均是 numer —

    // top: 100 — 盒子上边框距离视口顶部的距离

    // bottom: 302 — 盒子底边框距离视口顶部的距离 = top + height

    // left: 394 — 盒子左边框距离视口左侧的距离

    // right: 796 — 盒子右边框距离视口左侧的距离 = left + width

    // x: 394 — 盒子左上角相对于视口左侧的距离

    // y: 100 — 盒子左上角相对于视口顶部的距离

    // 盒子的宽高

    // width: 402

    // height: 202


4.监听滚动、浏览器获取滚动条高度、触底

·滚动距离

  • IE6/7/8 document.documentElement.scrollTop
  • IE9及以上 window.pageYOffset 或者 document.documentElement.scrollTop
  • Safari window.pageYOffset或者document.body.scrollTop
  • Firefox window.pageYOffset 或者 document.documentElement.scrollTop
  • Chrome document.documentElement.scrollTop

·滚动条高度

  • 滚动条高度 document.body.scrollHeight与document.documentElement.scrollHeight
  • 滚动条宽度 document.body.scrollWidth与document.documentElement.scrollWidth

·监听滚动、触底

// 是否滚动到底部
function handleScroll(e){let Dom=e.currentTargetif(Dom === Dom.window)Dom=document.documentElement || document.bodylet scrollTop = Dom.scrollTop // 滚动条距离顶部的距离let windowHeight = Dom.clientHeight // 可视区的高度let scrollHeight = Dom.scrollHeight //dom元素的高度,包含溢出不可见的内容if ( scrollTop + windowHeight >=scrollHeight) {console.log('到底了')}
}
window.onscroll =handleScroll
或者
document.getElementById('id').addEventListener('scroll',handleScroll,false)

·e.target与e.currentTarget区别详解

  • target:触发事件的源组件(事件注册/绑定所在组件)

  • currentTarget:事件触发的当前事件

  • (当前事件,可能是触发事件的源组件,可能是触发的事件组件(即触发事件源组件的子元素),
    此时点击子元还是父元素,都是当前事件,应用e.currentTarget)。

5.获取Dom节点上的属性(getAttribute,setAttribute)

  • 获取
    Dom.getAttribute(name)
  • 设置
    Dom.setAttribute(name,value)

说明:

  • name:要设置的属性名
  • value:要设置的属性值

6.DOM节点创建节点、添加节点、删除节点、复制节点、替换节点

·创建节点

  • createElement()方法:创建元素节点
var element = document.createElement("p");  //创建段落元素节点
// var element = document.createTextNode('xxx') //创建文本节点
element.className = "red";
document.body.appendChild(element);

·添加节点

  • node.appendChild(child)
//创建元素节点
var li =document.createElement('li');
//添加节点
var ul = document.querySelector('ul');
ul.appendChild(li);
  • node.insertBefore(child,指定元素)//插入到指定元素之前
var liDom = document.createElement('li');
ul.insertBefore(liDom,ul.children[0]);

·删除节点

  • node.removeChild(child);
var ul = document.querySelector('ul');
ul.removeChild(ul.children[0]);

或者

const child = document.getElementById("p1");
child.parentNode.removeChild(child);

·复制节点

  • node.cloneNode();
  • node.cloneNode()方法返回调用该方法的结点的一个副本。也称为克隆节点或者拷贝节点。括号里面为空或者false为浅拷贝,只复制结点不复制内容。括号里面为true为深拷贝,复制节点,复制内容
var ul = document.querySelector('ul');
var liDom = ul.children[0].cloneNode(true);
ul.appendChild(liDom);

·替换节点

  • node.replaceChild(child,需要替换的元素);
<div id="div1"><p id="p1">这是一个段落。</p><p id="p2">这是另一个段落。</p>
</div>
<script>
var para = document.createElement("p");
var node = document.createTextNode("这是新文本。");
para.appendChild(node);var parent = document.getElementById("div1");
var child = document.getElementById("p1");
parent.replaceChild(para, child);
// child.parentNode.replaceChild(para, child);
</script>

7.判断节点类型

var DOM=document.getElementById(“id”)

  • DOM[0].nodeName:标签名
  • DOM[0].nodeType:节点类型
  • DOM[0].nodeValue:节点值

//元素节点 nodeName 标签名 nodeType 1 nodeValue null

//属性节点 nodeName 属性名 nodeType 2 nodeValue 属性值

//文本节点 nodeName #text nodeType 3 nodeValue 文本的值

8.获取元素

·利用DOM提供的方法获取元素

  • document.getElementById(‘id’) // id获取
  • document.getElementsByClassName(‘class’)// 类名获取
  • document.getElementsByTagName(‘div’) // 标签名获取
  • document.getElementsByName(‘name属性’) // <button name="aaa">我是button</button>
  • document.querSelector(‘.class’) 或者 document.querSelector(‘#id’)
  • document.querySelectorAll(‘.class’) // 获取所有的class

·利用节点层级关系获取元素

  • 利用父子兄弟节点关系获取元素

9.节点关系及获取方式

  • node.parentNode // 获取父级节点(返回最近一个父级节点)
  • parentNode.childNodes(index) // 获取子节点(返回子节点,包括元素节点,文本节点等。)
  • parentNodes.children(index) // parentNodes.children是一个只读属性,返回所有的子元素节点,它只返回子元素节点,其余节点不返回
  • parentNode.firstChild // 返回第一个子节点,找不到就返回null,同样,也是包含所有的节点
  • parentNode.lastChild // 返回最后一个子节点吗,找不到则返回null,同样,也是包含所有的节点
  • parentNode.firstElementChild // 返回第一个子元素节点,找不到则返回null(IE9以上才支持)
  • parentNode.lastElementChild // 返回最后一个子元素节点,找不到则返回null(IE9以上才支持)
  • node.nextSibling // 返回当前元素的下一个兄弟节点,找不到则返回null,同样,也是包括所有节点
  • node.previousSibling // 返回当前元素的上一个兄弟节点,找不到则返回null,同样,也是包括所有节点
  • node.nextElementSibling // 返回当前元素下一个兄弟元素节点,找不到则返回null (IE9以上才支持)
  • node.previousElementSibling // 返回当前元素上一个兄弟节点找不到就返回null (IE9以上才支持)

10.innerHTML 、 innerText、outerhtml的区别

 <div id="test"> <span style="color:red">test1</span> test2 
</div>

innerHTML:
innerHTML写入的内容可以解析成标签,获取的也是节点内的标签

  1. 获取:
    innerHTML的值是“<span style="color:red">test1</span> test2
    在这里插入图片描述
  2. 写入:
    在这里插入图片描述

innerText:
innerText写入的内容只能当作是文本在浏览器中显示,获取的是显示的文本

  1. 获取:
    在这里插入图片描述
  2. 写入:
    在这里插入图片描述

outerhtml:
outerhtml当前自身及内部的标签

  1. 获取:
    outerHTML的值是“<div id="test"><span style="color:red">test1</span> test2</div>
    在这里插入图片描述
  2. 写入:
    在这里插入图片描述

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

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

相关文章

java基础 多态+时间API+正则+泛型

多态 声明方式 向上转型 父类类型 变量名 new 子类类型; 接口名称 变量名 new 实现类名称; 向下转型 &#xff08;在类型转换前 先通过 变量名 instanceof 子类类型&#xff09; 子类类型 变量名 (子类类型) 父类对象 实现类名称 变量名 (实现类名称) 接口名称 向上转型…

xcode打包导出ipa

众所周知&#xff0c;在开发苹果应用时需要使用签名&#xff08;证书&#xff09;才能进行打包安装苹果IPA&#xff0c;作为刚接触ios开发的同学&#xff0c;只是学习ios app开发内测&#xff0c;并没有上架appstore需求&#xff0c;对于苹果开发者账号认证需要支付688&#xf…

某团app之mtgsig2.4参数分析

文章转载于&#xff1a;https://blog.csdn.net/heier_blue/article/details/126394023?spm1001.2014.3001.5502 本文只作学习研究&#xff0c;禁止用于非法用途&#xff0c;否则后果自负&#xff0c;如有侵权&#xff0c;请告知删除&#xff0c;谢谢&#xff01; 前言 某团…

[Python]搭建虚拟环境与项目的创建(Windows)

前言 系列文章目录 [Python]目录 视频及资料和课件 链接&#xff1a;https://pan.baidu.com/s/1LCv_qyWslwB-MYw56fjbDg?pwd1234 提取码&#xff1a;1234 文章目录前言1. Django 安装2. 为什么要搭建虚拟环境3. 如何搭建虚拟环境3.1 切换Python版本3.2 安装虚拟环境的命令3.3 …

彻底Sparse!基于稀疏交互机制的端到端检测器

摘要&#xff1a; Sparse R-CNN基于R-CNN框架&#xff0c;其提出了一种一对一稀疏交互的机制&#xff0c;同时借鉴了DETR的可学习候选目标的思想&#xff0c;并且结合二分匹配的标签分配策略和集合预测的形式&#xff0c;实现了端到端目标检测的效果&#xff0c;整个过程无需R…

用户运营|车企运筹七条黄金法则,制胜客户体验管理

本文是中国汽车行业客户体验管理(Customer Engagement)和直连直营(DTC)销售模式三部曲系列的首篇。在随后发布的两篇文章中,我们将探讨如何在用户运营中加强客户体验管理,以及如何通过数字化转型实现客户体验管理和DTC。本文是中国汽车行业客户体验管理(Customer Engage…

玛雅Maya2022-2023最新分享

玛雅Maya专业的三维软件玛雅,帮助专业的动画设计师制作出最丰富最动感的动画作品。Maya(2022-2023)最新分享如下: 玛雅Maya2022 玛雅Maya2022是一款专业的三维软件,用于创建逼真的角色和大片水准的特效。无论您是为逼真的数字双精度动画还是为可爱的卡通角色设置动画,Maya …

MySQL--约束

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 1&#xff1a;非空约束 2&#xff1a;唯一性约束 3&#xff1a;主键约束 4&#xff1a;外键约束 在MySQL中是有着约束的&#xff0c;约束是什么呢&#xff0c;约束又…

springboot在线电子书阅读系统在线视频点播系统毕业设计毕设作品开题报告开题答辩PPT

springboot在线电子书阅读系统在线视频点播系统毕业设计毕设作品开题报告开题答辩PPT 【用户功能】 用户注册&#xff1a;填写手机账号和密码&#xff0c;注册新用户 登录功能&#xff1a;注册普通账号登录&#xff1b;登录后可以修改用户的基本信息&#xff0c;也可以退出。 …

C语言之长见识了(函数和一些不常见类型)

C1. strstr2. gets3. strlen4. \r\n5. const char * 与 char const *6. size_t、ssize_t、unsigned char、uint8_t6.1 size_t、ssize_t6.2 unsigned char6.3 uint8_t / uint16_t / uint32_t / uint64_t7. memcpy1. strstr 在字符串 haystack 中查找第一次出现字符串 needle 的…

【汽车ECU开发】------INCA使用教程

对于VCU或者是发动机标定工程师&#xff0c;INCA简直是跟亲人一样熟悉&#xff0c;基本上每天都要跟它打交道。分享一波INCA的基本使用操作。其基本的流程如下图所示&#xff1a; 主要操作步骤&#xff0c;打开软件&#xff1a; 点击菜单栏左上角数据库—>新建&#xff0…

TCS34725颜色感应识别模块

TCS34725颜色感应识别模块前言一、模块介绍二、产品参数三、实物图四、模块引脚介绍五、使用说明工作模式的选择上位机界面说明六、实例应用实物接线所用代码前言 TCS34725传感器模块&#xff0c;使用IIC或者UART通信&#xff0c;可直接输出RGB值。 能当做单纯的简单TCS34725模…

Java入门基础知识

Java入门基础知识概念 关键字:具有特殊用途的单词。 保留字:未使用的关键字(goto const)。 直接量:不可用作标识符(ture false null)。 一、JAVA运行机制 Java程序的运行必须经过编写、编译、运行三个步骤。 编写是指在Java开发环境中进行程序代码的输入,最终形成后缀名…

教你如何使用GPA导出模型,另送一个 GPA CSV2MESH Tool in unity

以前写过一篇&#xff1a;Unity - RenderDoc 抓帧导出 FBX&#xff08;带UV&#xff09; 吐槽 我估计GPA是怕收律师函&#xff0c;因为如果 GPA 将所有资源一键提取&#xff0c;一键导出&#xff0c;那么可能很多开发商会告他 可以看到也好几个帖子问 GPA 官方&#xff0c;都…

【PDN仿真笔记3-电容布局Q3D模型搭建】

PDN仿真笔记3-电容布局Q3D模型搭建 1. 叠层参数及设计要求 2. 变量设置 根据设计要求&#xff0c;将各个参数设置为变量&#xff0c;通过Add添加变量名称及数值&#xff08;下图value应该为1.2mil&#xff09; 部分设置完成的变量 3.搭建平面 引用2节中设置的变量&#xf…

检测网络框架越来越多

搬运工又来了 之前也发过相关 在汇总说一下啊~~ yolo也不在孤单了~~ 出了一大堆了~~ 之前都一一发过 今天在来个大汇总 目标检测是现在最热门的研究课题&#xff0c;也一直是工业界重点研究的对象&#xff0c;最近几年内&#xff0c;也出现了各种各样的检测框架&#xff0c…

PHP第三方易宝支付对接

简言&#xff1a; 最近手头有个数字藏品的项目&#xff0c;需要对接第三方易宝支付&#xff0c;在此整理自己的对接经验&#xff0c;希望对大家有所帮助。 步骤 1&#xff0c;下载sdk PHP第三方支付易宝支付最新sdk包&#xff0c;其中包含回调。-PHP文档类资源-CSDN下载 2&…

树形DP

285. 没有上司的舞会 - AcWing题库 题意是给你每个人的开心值&#xff0c;和每个人的顶头上司&#xff0c;如果每个人与自己的顶头上司不会同时去的前提下&#xff0c;问你最大的开心值是多少 树形dp 注释写在代码下面啦~ #include<iostream> #include<cstring>…

ThinkPHP6.0开启多应用模式的方法

ThinkPHP发展至今已经到了6..0.X版本,整个结构较thinkphp5有了很大的变化,ThinkPHP6.0基于精简核心和统一用法两大原则在5.1的基础上对底层架构做了进一步的优化改进,并更加规范化。由于引入了一些新特性,ThinkPHP6.0运行环境要求PHP7.1+,不支持5.1的无缝升级(官方给出了升…

3_1 操作系统

3.01 操作系统概述 接口的区分&#xff1a; 人机之间的接口&#xff1a;命令&#xff0c;窗口应用软件与硬件之间的接口&#xff1a;api的接口 进程管理 3.02 进程管理——进程状态转换图 进程的状态&#xff1a;操作系统当中对进程进行管理的时候&#xff0c;为进程指定了几种…