首页 > 编程语言 >JavaScript的DOM讲解

JavaScript的DOM讲解

时间:2025-01-10 16:05:15浏览次数:3  
标签:JavaScript DOM 标签 元素 获取 讲解 document 节点

 一、DOM 基础概念

 (1)DOM 定义:文档对象模型(Document Object Model)

        作为一系列极具实用价值的编程接口,赋予了开发者改变网页内容、调整页面结构以及修饰样式的能力。在 DOM 的体系架构里,网页文档由document精准指代,页面元素对应着element,而像标签、属性、文本、注释等构成网页的基础单元统统被抽象为node,它们均以对象的形式存在,彼此关联协作,共同勾勒出网页的数字化蓝图。

               

 DOM就是提供接口,文档对象模型(Document Object Model),方便开发者改变网页内容。

 文档:一个页面就是一个文档,用document表示

 元素:标签就是元素,用element表示

 节点:网页所有内容都是节点,用node表示

(2)DOM 树结构:

        DOM 树结构:以<html>作为根基性的起始元素,其下延展包含<head>以及<body>等关键性子元素,网页中的每一处细节、每一个片段,无论其多么微小或是繁杂,在 DOM 树这一精巧结构中都能找到与之精准对应的节点,这些节点依据层级与逻辑关系有序排列,恰似一棵枝繁叶茂的大树,撑起了整个网页的运行架构。

 二、事件处理

(1)事件

        用户与浏览器的交互行为,如点击按钮、鼠标移动、关闭窗口

(2)事件处理方式:

        1.在标签里设置js代码

        在标签里设置js代码,事件触发后会被执行,但缺点很明显,结构与行为耦合,不方便后期维护,不推荐使用

         <button οnclick="alert('哈喽');">

        2.绑定处理函数

为事件绑定处理函数的形式来响应事件,事件发生后,对应的函数将被调用

第一步:获取对象,事件源

第二步:为事件绑定事件处理函数(响应函数)

例如:

首先,需要精准地获取目标按钮对象,就像通过var btn = document.getElementById("btn");这样的代码语句,利用元素的独特 id 标识将其从 DOM 树中精准 “抓取” 出来。

然后,为该按钮对象的特定事件绑定精心编写的处理函数,例如btn.onclick = function() {... },如此一来,当对应的事件(这里指的是按钮的单击事件)被触发时,预先设定的函数便会有条不紊地启动运行,执行一系列预设的操作,确保网页交互流畅且逻辑清晰。

 三、文档加载

        浏览器加载页面是自上而下,读一行运行一行,js代码如果写在页面上面,页面中DOM对象尚未完整加载,导致代码找不到目标元素,导致错误。

第一种:

         js代码写在页面下面,这样就可以在页面加载后再执行js代码

第二种:

        js代码写在上面的话,要通过onload事件,为window绑定onload事件会让js代码在页面加载完成后才执行,确保所有DOM对象已经加载完毕。

        通过window.onload = function() {... }这样的代码编写形式,将需要在页面加载完成后执行的代码封装在响应函数内部。如此一来,只有当整个页面,包括所有 DOM 对象都已成功加载,进入稳定可用状态时,该响应函数才会被触发启动,进而执行其中的代码逻辑,为网页交互与功能实现提供坚实保障。

四、获取元素方法

1、getElementById()

        通过id,精准定位元素,id区分大小写

        返回值:一个元素节点对象

2、getElementsByTagName()

        通过标签名,一次捕获一组有相同标签名的元素节点

        返回值:以伪数组形式呈现,即使查询只有一个元素,也封装到数组中

        可巧妙运用element.getElementsByTagName('标签名')这般语法,只需确保父元素指向明确无误,就能精准网罗所需子元素。需要注意的是,此方法获取的结果并不包含父元素自身,各个子元素依序排列在返回的伪数组之中,等待开发者进一步调用操控。

3、getElementsByName()

        通过name属性,获取一组元素节点对象

        返回值:伪数组对象

4、getElementsByClassName()

        通过元素class属性,获取一组元素节点对象

        返回值:伪数组对象

        不支持IE8及以下;浏览器

5、childNodes、childen

        childNodes属性会获取包括文本节点在内的所有节点,DOM标准,标签间的空白也会被当成文本节点

        返回值:返回父元素下的所有子节点,获取包括文本节点在内的所有节点,DOM标准,标签间的空白也会被当成文本节点

        children属性可以获取当前元素的所有子元素,不包括空白文档了

        返回值:children属性可以获取当前元素的所有子元素,不包括空白文档了

6、firstChild、firstElementChild返回父元素下的第一个子节点

        (1)、firstChild 第一个子节点(包括空白的文本节点)

        (2)、firstElementChild 获取当前元素的第一个子元素

7、parentNode()

        语法:某元素.parentNode

        返回某元素的父节点

8、previousSibling 、previousElementSibling,返回某元素的前一个兄弟节点

        (1)、 previousSibling [ˈpriːviəs] ['sibliŋ] 返回前一个兄弟节点 也有可能获取到空白的文本

        (2)、 previousElementSibling 返回前一个兄弟元素,不包括空白文本,注意:不支持ie8及以下的浏览器

9、获取特定标签:body 、html 、页面所有元素

(1)、获取body标签,

        方法一:

                document.getElementsByTagName('body')[0]

        方法二:

                document.body

        既可以通过document.getElementsByTagName("body")[0]这种传统的、基于标签名检索的方式,也可以直接使用更为简洁的document.body;

(2)、获取html根标签,

         document.documentElement

(3)、获取页面中的所有的元素

        方法一:

                 document.all

        方法二:

                 document.getElementsByTagName('*')

        可选择document.all或document.getElementsByTagName("*")这两种方式,前者在一些老旧浏览器中有较好的兼容性表现,后者则更为通用,开发者可根据项目实际需求与浏览器适配情况灵活选用。

 10、querySelector () 和 querySelectorAll ()

(1)、document.querySelector()

        通过给定的字符串作参数后,转成相应CSS选择器,之后找到符号条件的第一个元素

返回值:返回唯一的元素,无论满足条件的元素有几个,只返第一个元素

(2)、document.querySelectorAll()

        通过给定的字符串作参数后,转成相应CSS选择器,之后找到符号条件的元素并封装成数组

        返回值:符合条件的所有元素封装到一个伪数组中返回,即使符合条件的元素只有一个,它也会返回数组。

它返回的是一个伪数组,具有以下特点:

        有长度(length属性)和索引编号,就像普通数组一样可以通过索引访问元素,例如result[0]可以获取第一个匹配的元素。

        但是它没有像普通数组那样的pop()(用于删除数组最后一个元素)和push()(用于在数组末尾添加元素)等数组方法。

注意事项:

        哪怕只有一个元素,通过querySelectAll()获取过来的也是一个伪数,里面只有一个元素而已

11、设置 / 修改 DOM 元素内容的两种方式是:元素.innerText 属性、元素.innerHTML 属性。

(1)、innerText

        可读写,用于获取或设置元素的纯文本内容,自动将html标签,空格,换行去除,只显示文本。

        例如,有一个<div><p>这是<span>一段</span>文本</p></div>,如果获取div的innerText,得到的将是 “这是一段文本”,其中的<p>和<span>标签不会被显示。

(2)、innerHTML

        可读写,用于获取或设置元素的HTML内容,识别标签,保留空格和换行,比较常用

        当用于获取元素内部的html内容时,对于自结束标签,这个属性没有意义

        例如,<div><p>这是<span>一段</span>文本</p></div>为例,如果获取div的innerHTML,得到的将是完整的 HTML 字符串 “<p>这是一段文本</p>”。使用innerHTML设置内容时,可以插入新的 HTML 标签,这些标签会被浏览器解析和渲染。

(3)、补充

        (1)、 二者的区别是:元素.innerText 属性只识别文本,不能解析标签;元素.innerHTML 属性能识别文本,能够解析标签;如果还在纠结到底用谁,可以选择 innerHTML。

        (2)、console.dir打印我们返回的元素对象,更好的查看里面的属性和方法

        (3)、如果需要读取元素节点属性

                语法: 元素.属性名,

                例如:元素.id ;元素.name ;元素.src ;元素.href等

                表单属性:type、value、checked、selected、disabled等

                注意:class属性不能采用这种方式,读取class属性时需要使用 元素.className

                value值:就是输入文本框中的内容,要修改value值 element.value = "~~";

标签:JavaScript,DOM,标签,元素,获取,讲解,document,节点
From: https://blog.csdn.net/2301_76428778/article/details/145059578

相关文章

  • 基于SpringBoot+Vue+uniapp的民宿在线预定平台毕业设计的详细设计和实现(源码+lw+部署
    前言......
  • JavaScript系列(16)--原型继承
    JavaScript原型继承......
  • JavaScript 中函数的 this 问题
    在JavaScript中,this关键字的值是由函数调用的上下文决定的。this的值在不同的场景中会有所不同,理解这些场景非常重要。1.全局上下文中的this在全局执行环境中(非严格模式),this指向全局对象(在浏览器中是window,在Node.js中是global)。在严格模式下,this会是undefined......
  • Eval-Expression.NET:动态执行C#脚本,类似Javascript的Eval函数功能
    我们都知道在JavaScript中,我们可以通过Eval来执行JavaScript字符串代码。下面推荐一个.Net版本的Eval的开源项目。01项目简介Eval-Expression.NET是一个非常强大工具,使得开发人员可以动态编译和执行C#代码和表达式。通过C#反射,还能轻松访问公共和私有方法、字段、属性值,并创建......
  • 【用 JavaScript 做一个会动的 3D 魔方】:让网页酷到飞起!
    如果你对JavaScript有一点点了解,并且想尝试一些好玩儿的实战项目,那么3D魔方将是一个无敌的选择!这篇博客将手把手教你用原生JavaScript构建一个会旋转、可交互的3D魔方。项目效果预览一个可旋转的3D魔方,你可以通过鼠标或触摸操作与之交互:•旋转魔方:点击并拖动......
  • 虚拟DOM的优势(尤雨溪 对于 Virtual DOM 的优势的回答
    网上都说操作真实DOM慢,但测试结果却比React更快,为什么?-尤雨溪的回答-知乎https://www.zhihu.com/question/31809713/answer/535448751.原生DOM操作vs.通过框架封装操作。这是一个性能vs.可维护性的取舍。框架的意义在于为你掩盖底层的DOM操作,让你用更声明式的......
  • log4j的配置ConversionPattern详细讲解
    先写下我一直没找到的ConversionPattern里面参数代表的详细含义参数说明例子%c列出logger名字空间的全称,如果加上{<层数>}表示列出从最内层算起的指定层数的名字空间log4j配置文件参数举例输出显示媒介假设当前logger......
  • Three.js教程015:全面讲解Three.js的UV与应用
    文章目录全面讲解UV与应用UV介绍代码演示完整代码全面讲解UV与应用UV介绍在Three.js中,UV坐标(也称为纹理坐标)是用来定义纹理如何映射到三维模型上的一组二维坐标。UV坐标的范围通常是(0,0)到(1,1),其中:U对应纹理的横向轴(类似于X轴)。V对应纹......
  • 【Javascript Day4】三元运算符及循环(while、do while)
    目录三元运算符循环while循环do{ }while()循环案例三元运算符//0:女 1:男     varsex=1;    //编号的转换变量,基于编号的值提供显示文本    vartemp="";    if(sex===0){      temp="女";   ......
  • JavaScript 正则
    一:正则概念       用于定义字符串规则,并检查字符串是否符合规则,合规的内容提取出来    二:正则创建方法方法1:构造函数            var变量=newRegExp('正则表达式','匹配模式');            参1: 规则  ......