【JS交互篇】DOM操作基础

news2024/11/22 17:08:48

一、DOM概述

在这里插入图片描述

1.1 什么是DOM

  • DOM(Document Object Model)文档对象模型,用来表示和操作html或xml文档内容的基础API;
  • 当网页被加载时,浏览器会创建页面的文档对象模型DOM,而DOM模型被构造为对象的树(Dom Html Tree);
  • DOM包含了所有的html标签元素、文本字符串、甚至是html注释;
  • 利用DOM中的属性和方法,使程序有能力动态的访问和更新文档中的内容、结构以及样式,这样就使得页面的交互性大大增强;

原生JavaScipt案例合集
JavaScript +DOM基础
JavaScript 基础到高级
Canvas游戏开发

1.2 DOM应用

  • 通过DOM操作能够改变页面中所有HTML元素;
  • 通过DOM操作能够改变页面中所有HTML属性;
  • 通过DOM操作能够改变页面中所有CSS样式;
  • 通过DOM操作能够对页面中所有事件做出反应;

1.3 DOM树

DOM把层次中的每一个对象都称之为节点,这个层次结构可以看作树形结构,就如同我们的目录,一个根目录下有子目录,子目录下面还有子目录。DOM树形图如下;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rCxjW8vT-1691456155382)(01_DOM基础.assets/image-20210220113047306.png)]

1.4 DOM节点类型与相关属性

DOM树中所有的对象都是节点,如:文档节点、元素节点、属性节点、文本节点、注释节点等;

节点相关的属性如下:

  • nodeName 获取节点的名称,只读
  • nodeValue 获取节点内容(适用于文本节点和注释节点)
  • nodeType 获取节点类型,只读

一个HTML或XML文档的文件,元素,属性等有不同的节点类型。有12种不同的节点类型,不同的节点类型也可以有不同的子节点类型如下:

节点类型描述子节点
1Element一个元素Element, Text, Comment, ProcessingInstruction, CDATASection, Entity参考手册
2Attr一个属性Text, Entity参考手册
3Text一个元素的文本内容 或属性None
4CDATASection一个文档的CDATA部分None
5Entity参考手册实体引用Element, ProcessingInstruction, Comment, Text, CDATASection, Entity参考手册
6Entity一个实体Element, ProcessingInstruction, Comment, Text, CDATASection, Entity参考手册
7ProcessingInstruction一个处理指令None
8Comment一个注释None
9Document整个文档(DOM树的根节点)Element, ProcessingInstruction, Comment, DocumentType
10DocumentType为文档实体提供接口None
11DocumentFragment表示邻接节点和它们的子树。Element, ProcessingInstruction, Comment, Text, CDATASection, Entity参考手册
12Notation代表一个符号在DTD中的声明None

通过属性nodeType可以判断节点类型,那么根据节点类型DOM树可以分为以下两种:

  • 第一种就是上面讲过的,包含了所有标签、属性、文本、注释等全部类型的DOM树,可以称为节点(node)树;
  • 第二种就是只包含标签这一种类型,可以称为元素(element)树。元素树状图更加简洁,查找和操作起来也更加快捷。所以,一般除非必要情况,都使用元素树来操作。

1.5 DOM节点层级关系

所谓DOM树中的节点关系,和我们人类直系关系相似,无非就是父子关系、兄弟关系、祖孙关系;对应节点如下:

  • 父节点(parent node) 父节点可以拥有任意数量的子节点
  • 子节点(child node) 子节点只能拥有一个父节点
  • 兄弟节点(sibling node) 拥有相同父节点的同级节点
  • 根节点(root node) 一个html文档一般只有一个根节点,根节点没有父节点,是最上层的节点
  • 祖先节点 包含子节点的节点都可以叫做祖先节点,包括父节点
  • 后代节点 一个节点内包好的所有节点,叫做后代节点,包括子节点

1.6 节点的层级访问

  • parentNode 获取当前节点的父节点
  • childNodes 获取当前元素节点的所有子节点
  • firstChild 获取当前元素节点的第一个子节点
  • lastChild 获取当前元素节点的最后一个子节点
  • previousSibling 获取当前节点的前一个同级节点
  • nextSibling 获取当前节点的后一个同级节点

1.7 元素的层级访问(Element元素节点之间的访问)

  • firstElementChild、lastElementChild 类似firstChild和lastChild,返回类型只有Element类型,忽略文本、注释、空白节点(IE8及以下返回undefined)
  • nextElementSibling、previousElementSibling 类似nextSibling和previousSibling,返回类型只有Element类型,忽略文本、注释、空白节点(IE8及以下返回undefined)
  • children 得到当前元素所有子元素的集合
  • childElementCount 子元素的数量
  • Element同样可以访问parentNode属性,只不过返回的结果都是Elment类型

1.8 document对象属性介绍

  • document.documentElement 获取文档的根节点
  • document.body 获取文档的主体对象
  • document.cookie 设置和获取cookie(后面本地存储讲)
  • document.readyState 获取当前文档的载入状态

二、DOM基础操作

2.1 获取元素的六种方式

  • getElementById() 通过id名获取元素
  • getElementsByTagName() 通过标签名获取元素
  • getElementsByClassName() 通过类名获取元素
  • getElementsByName() 通过name的值来获取元素,一般用在表单中(含有name属性的标签)
  • querySelector() 通过css选择器获取符合条件的第一个元素
  • querySelectorAll() 通过css选择器获取符合条件的所有元素

2.2 向页面输出内容的方式

  • document.write()
  • element.innerHTML
  • element.innerText

2.3 操作html属性的属性和方法

  • 通过对象属性设置和获取元素属性,格式 element.att || element[att] 如:img.src li.type div.className div.id p.style 等
  • 通过get/set方法设置和获取属性(所有html属性)
    • element.getAttribute(name) 通过元素节点的属性名称获取属性的值
    • element.setAttribute(name,value) 设置元素中的属性值
    • element.removeAttribute(name) 删除指定属性

2.4 获取和设置css样式

  • 内部样式

    • 利用上面设置html属性的方式添加样式

      p.style.color = "red";
      p.style = "color:red;text-indent:2em;";
      p.setAttribute("style","color:red;text-indent:2em;")
      
    • 利用cssText添加多个样式

      p.style.cssText = "color:red;text-indent:2em;";
      
    • 清除内部样式

      element.style.cssText = "";
      element.removeAttribute("style","");
      element.style="";
      
  • 外部样式(考虑兼容性)

    高级浏览器使用 window.getComputed(element, null)

    IE低版本浏览器使用 element.currentStyle

    // 浏览器兼容性写法
    function getOutStyle(ele,attr) {
        if (window.getComputedStyle) { //兼容高版本
            return window.getComputedStyle(ele)[attr];
        } else { //兼容 IE8以下
            return ele.currentStyle[attr];
        }
    }
    

三、DOM高级操作

3.1 节点创建

  • createElement() 创建一个元素节点

  • createTextNode() 创建文本节点

  • createAttribute() 创建属性节点,属性节点通过 nodeValue 或者 value 进行赋值

    属性节点通过借助 setAttributeNode(attr) 方法进行设置

  • createComment() 创建注释节点

3.2 节点操作

  • appendChild() 向指定元素中追加一个子元素节点

  • insertBefore(newNode, oldNode) 向父元素内部指定元素的前面插入一个新的子元素节点

  • replaceChild(newNode, oldNode) 使用新的节点替换父元素内部的原有子节点

  • cloneNode(deep?) 克隆指定节点,参数deep默认false,仅克隆当前节点。设置true,克隆当前及后代所有节点

  • removeChild() 从父元素中删除指定子元素节点

  • remove(index?) 移除指定(索引)节点

    例: 删除下拉列表中选中的菜单项
    ================================== html代码 ================================
    <select id="mySelect">
    function removeOption(){
        <option>苹果</option>
        <option>香蕉</option>
        <option>葡萄</option>
        <option>西瓜</option>
        <option>橙子</option>
    </select>
    <input type="button" onclick="removeOption()" value="移除选中的菜单项"/>
    ================================== js代码 ================================
    function removeOption(){
        var myEle = document.getElementById("mySelect");
        myEle.remove(myEle.selectedIndex);
    }
    小贴士:selectedIndex 属性可设置或返回下拉列表中被选选项的索引号;若允许多重选择,则仅会返回第一个被选选项的索引号	
    

    element.removeAttributeNode(attributename) 删除指定属性节点并返回移除后的节点

  • hasChildNodes() 用来检查当前元素是否含有子节点

四、DOM操作案例

原生JavaScipt案例合集

4.1 选项卡切换

在这里插入图片描述

4.2 评论系统

在这里插入图片描述

4.3 微博评论

在这里插入图片描述

4.4 购物车

在这里插入图片描述

拓展:

xml、json都是用来存储数据,但是xml结构看起来清晰,而json字符串结构不容易查看;但是xml不够简洁,对于计算机来说,json字符串保存数据更经济。

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

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

相关文章

真我V3 5G(RMX2200 RMX2201)解锁刷机全过程

安卓系统新Rom包为GSI&#xff0c;更具有通用性&#xff0c;可以比较放心刷。 原厂系统垃圾多、广告多&#xff0c;甚至热点功能不支持ipv6&#xff0c;严重偏离热点机的定位。 主要参考 https://www.bilibili.com/read/cv20730877/https://www.bilibili.com/read/cv2073087…

DSV-080-2NCP-N-MM两位两通常闭先导式电磁阀

该插装阀具有正向关断作用&#xff0c;设计用于负荷保持状态。 动作状况 断电时&#xff0c;DSV -080-2NCP-*-M*为止回阀&#xff0c;允许介质从1到2&#xff0c;同时阻止介质从2到1。 通电时&#xff0c;提升阀提升&#xff0c;打开从 2到1的通通道。 手动关闭选择:按下按…

分布式协议与算法——CAP理论、ACID理论、BASE理论

CAP理论 CAP理论&#xff0c;对分布式系统的特性做了高度抽象&#xff0c;比如抽象成了一致性、可用性和分区容错性&#xff0c;并对特性间的冲突&#xff08;也就是CAP不可能三角&#xff09;做了总结。 CAP三指标 CAP理论对分布式系统的特性做了高度抽象&#xff0c;形成了…

境内金融信息服务报备33家机构名单

2022年01月04日&#xff0c;国家互联网信息办公室关于发布第一批境内金融信息服务机构报备编号的公告&#xff0c;公开发布第一批20家金融信息服务机构的名称及报备编号。 2022年10月28日&#xff0c;国家互联网信息办公室关于发布第二批境内金融信息服务机构报备编号的公告&am…

Linux常用命令学习总结

Linux命令分类 1. Linux目录操作命令2. Linux文件名称3. Linux磁盘命令4. Linux进程与防火墙5. Linux用户与组的关系6. Linux权限操作(chmod命令)7. Linux中的文件类型文件的寻找 最近系统地学习下Linux命令的使用&#xff0c;因此作如下记录&#xff0c;以便随时复习和翻阅。 …

栈和队列的实现以及OJ题讲解

&#x1f493;博主个人主页:不是笨小孩&#x1f440; ⏩专栏分类:数据结构与算法&#x1f440; 刷题专栏&#x1f440; C语言&#x1f440; &#x1f69a;代码仓库:笨小孩的代码库&#x1f440; ⏩社区&#xff1a;不是笨小孩&#x1f440; &#x1f339;欢迎大家三连关注&…

Android安卓实战项目(9)—漂亮的健身APP主页控件+开机动画+BMI计算(源码在文末)可用于比赛项目或者作业参考中

Android安卓实战项目&#xff08;9&#xff09;—漂亮的健身控件APP开机动画BMI计算&#xff08;源码在文末&#x1f415;&#x1f415;&#x1f415;&#xff09; 介绍&#xff1a; BMI&#xff08;Body Mass Index&#xff0c;身体质量指数&#xff09;是一种常用的健康指标…

Spring Cloud Alibaba (一)

1 微服务介绍 1.1 系统架构演变 随着互联网的发展&#xff0c;网站应用的规模也在不断的扩大&#xff0c;进而导致系统架构也在不断的进行变化。 从互联网早起到现在&#xff0c;系统架构大体经历了下面几个过程: 单体应用架构--->垂直应用架构--->分布 式架构--->S…

LeetCode 29题:两数相除

题目 给你两个整数&#xff0c;被除数 dividend 和除数 divisor。将两数相除&#xff0c;要求 不使用 乘法、除法和取余运算。 整数除法应该向零截断&#xff0c;也就是截去&#xff08;truncate&#xff09;其小数部分。例如&#xff0c;8.345 将被截断为 8 &#xff0c;-2.…

一生一芯1——windows与Ubuntu双系统安装

UltraISO下载 下载链接&#xff1a;https://pan.baidu.com/s/18ukDs6yL64qU6thYyZEo-Q?pwdo8he 提取码&#xff1a;o8he 一路傻瓜安装&#xff0c;安装后点击继续试用 Ubuntu系统下载 这里我使用的是官网的22.04版本&#xff0c;由于大于4G&#xff0c;无法上传至百度网盘…

【CSS】CSS 选择器

CSS 选择器 1.基础选择器 1.1 元素选择器 语法&#xff1a;标签名{...} 元素选择器会选中对应标签名的HTML元素&#xff0c;例如&#xff1a;p{...}&#xff0c;div{...}&#xff0c;span{...}等 1.2 类选择器 语法&#xff1a;.类名{...} 类选择器会选中class属性为指定…

老胡的周刊(第102期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 ChatGPT-Shortcut[2] ChatGPT 快捷指令&…

MyBatis-Plus是什么以及特性[MyBatis-Plus系列] - 第481篇

​ 悟纤&#xff1a;师傅&#xff0c;宝宝不开心呢。 师傅&#xff1a;怎么不开心&#xff1f; 悟纤&#xff1a;感觉好多重复的代码来着。 师傅&#xff1a;是哪个部分重复的代码来着&#xff1f; 悟纤&#xff1a;就是对于一个model的增删改查部分。 师傅&#xff1a;那这…

周赛357(模拟、脑经急转弯、多源BFS+并查集、反悔贪心)

文章目录 周赛357[2810. 故障键盘](https://leetcode.cn/problems/faulty-keyboard/)模拟双端队列O(n) [2811. 判断是否能拆分数组](https://leetcode.cn/problems/check-if-it-is-possible-to-split-array/)脑经急转弯 [2812. 找出最安全路径](https://leetcode.cn/problems/f…

SpringBoot系列---【三种启动传参方式的区别】

三种启动传参方式的区别 1.三种方式分别是什么? idea中经常看到下面三种启动传参方式 优先级 Program arguments > VM options > Environment variable > 系统默认值 2.参数说明 2.1、VM options VM options其实就是我们在程序中需要的运行时环境变量&#xff0c;它需…

实现Jenkins自动发包配置

参考抖音&#xff1a;Java不良人 其中的视频演示代码 不推荐把jenkins端口一直开放&#xff0c;推荐使用时候放开&#xff08;版本不太新&#xff0c;避免漏洞攻击&#xff09; [rootVM-4-12-centos soft]# docker-compose -v Docker Compose version v2.19.1docker-compose.…

TCP三次握手四次断开

一、了解TCP &#x1f345;TCP &#xff1a;传输控制协议&#xff0c;是一种面向连接的可靠的传输协议。 什么是可靠的传输协议&#xff1f;如何保障可靠传输&#xff1f; 保证可靠性&#xff1a; 1.确认机制 2.重传输机制什么是面向连接&#xff1f;如何保障面…

C语言 | 位运算符>>的高级用法

一、人物简介 第一位闪亮登场&#xff0c;有请今后会一直教我们C语言的老师 —— 自在。 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。 二、优化除法运算 除法运算需要比位移运算需要更多的计算资源&#xff0c;某些情况下采用位移运算可以提高性能 代码示例 #in…

代码随想录算法训练营第51天|动态规划part09|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

代码随想录算法训练营第51天&#xff5c;动态规划part09&#xff5c;198.打家劫舍、213.打家劫舍II、337.打家劫舍III 198.打家劫舍 198.打家劫舍 思路&#xff1a; 仔细一想&#xff0c;当前房屋偷与不偷取决于 前一个房屋和前两个房屋是否被偷了。 所以这里就更感觉到&a…

VectorDBBench向量数据库性能评测工具

目录 一、背景和意义 二、特点和优势 三、应用场景和实际效果 四、总结 摘要: VectorDBBench.com是一个基于云计算的向量数据库基准测试平台,旨在评估不同向量数据库的性能和可扩展性。本文介绍了VectorDBBench的背景和意义,分析了VectorDBBench的特点和优势,并从多个方…