DOM(文档对象模型)

2023-11-06

目录

1、DOM是什么

2、DOM 树

3、节点

4、获取元素 

4.1、根据id获取

4.2、根据标签名获取

4.3、根据 name 属性来获取

4.4、根据类名来获取

4.5、根据选择器获取

4.6、获取body元素

4.7、获取html元素

5、操作元素

5.1、改变内容

5.2、元素属性

5.3、表单元素

5.4、样式元素

5.4.1、style

5.4.2、className属性

5.5、操作属性、

5.5.1、setAtrribute()

5.5.2、getAttribute()

5.5.3 removeAttibute()

5.5.4、自定义属性

6、DOM事件

6.1、什么是事件

6.2、事件的要素

6.3、常见鼠标事件类型


1、DOM是什么

DOM Document Object Model ,文档对象模型),是用来呈现以及与任意 HTML XML 文档交互的API Application Program Interface ,应用程序接口)。 DOM 是载入到浏览器中的文档模型,以节点树的形式来表现文档,每个节点代表文档的构成部分(例如:页面元素、字符串或注释等等)。
DOM 是万维网上使用最为广泛的 API 之一,它允许运行在浏览器中的代码访问文件中的节点并与之交互。节点可以被创建,移动或修改。事件监听器可以被添加到节点上并在给定事件发生时触发。
DOM 并不是天生就被规范好了的,它是浏览器开始实现 JavaScript 时才出现的。这个传统DOM 有时会被称为 DOM 0 。现在, WHATWG 维护 DOM 现存标准。

2、DOM

DOM 树又叫文档树模型,把文档映射成树形结构,通过节点对象对其处理,处理的结果可以加入到当前的页面。
文档:一个 HTML 页面就是一个文档,使用 document 表示

3、节点

节点是构成网页最基本的组成部分,网页中的所有内容在文档树中都是节点(标签、属性、文本、注释等),使用node 表示
(1) 标签节点:也叫元素节点,指网页中的所有标签,使用 element 表示;
(2)属性节点:指元素节点的属性;
(3)文本节点:指元素节点的内容

4、获取元素 

想要对 DOM 进行操作,首先需要获取页面中的元素,在 JavaScript 中,提供了以下几种获取页面元素的方法。

4.1、根据id获取

语法格式: var 元素对象 = document . getElementById ( "id 属性名称 " );
作用:通过页面中某个元素的 id 属性来获取这个元素对象。
返回 值:这个方法执行后会有一个返回值,如果获取到则返回当前对象,否则返回 null
示例:
    <div id="box">这是一个块</div>
    <script>
        var box = document.getElementById('box');
        console.log(box);
        console.log(typeof box);
    </script>

4.2、根据标签名获取

语法格式: var 返回对象集 = document . getElementsByTagName ( ' 标签名称 ' );
作用:根据指定的标称名称返回这些对象。
示例:
    <ul>
        <li>北京</li>
        <li>天津</li>
        <li>上海</li>
        <li>重庆</li>
    </ul>
    <script>
        var lis = document.getElementsByTagName('li');
        console.log(lis);
    </script>
除了可以使用 document 来引用这个方法外,还可以使用它父组对象来引用这个方法。
    <ul id="first">
        <li>北京</li>
        <li>天津</li>
        <li>上海</li>
        <li>重庆</li>
    </ul>
    <script>
        // 获取父级元素 
        var ul = document.getElementById('first');
        console.log(ul);
        // 通过父级元素来获取子元素 
        lis = ul.getElementsByTagName('li');
        console.log(lis);
    </script>

4.3、根据 name 属性来获取

语法格式: var 元素对象集 = document . getElementsByName ( 'name 属性名 ' )
作用:根据 name 属性来获取元素对象的集合。
示例:

    <p> <input type="checkbox" name="hobby" value="音乐">音乐
        <input type="checkbox" name="hobby" value="游戏">游戏
    </p>
    <script>
        var hobbies = document.getElementsByName('hobby');
        console.log(hobbies);
    </script>

4.4、根据类名来获取

语法格式: var 元素对象集 = document . getElementsByClassName ( ' 类名称 ' );
作用:根据元素的样式名称来获取元素集(也就是元素的 class 属性来获取)。
示例:
    <div class="box">div1</div>
    <div class="box">div2</div>
    <script>
        var divs = document.getElementsByClassName('box');
        console.log(divs);
    </script>

4.5、根据选择器获取

根据指定选择器获取元素对象有两种方式:一是获取单个,一是获取多个。
获取单个对象: var 元素对象 = document . querySelector ( ' 选择器名称 ' );
获取多个对象: var 元素对象 = document . querySelectorAll ( ' 选择器名称 ' );
示例:
    <div id="box1">有id的div</div>
    <div class="box2">有类样式的div</div>
    <div class="box2">有类样式的div</div>
    <p> <input type="text" name="account" value="xian">
        <input type="radio" name="gender" value="男">男
        <input type="radio" name="gender" value="女">女 </p>
    <script>
        // 根据标签获取 
        var div = document.querySelector('div');
        console.log(div);
        var divs = document.querySelectorAll('div');
        console.log(divs);
        // 根据id获取
        div = document.querySelector('#box1');
        console.log(div);
        // 根据类样式 
        divs = document.querySelectorAll('.box2');
        console.log(divs);
        // 根据属性选择器来获取 
        var gender = document.querySelectorAll('input[type="radio"]');
        console.log(gender);
    </script>

4.6、获取body元素

语法格式: document . body ;
作用:获取 body 中的所有元素
示例:

    <div class="box"></div>
    <input type="text" name="" id="">
    <h1>h1</h1>
    <script> 
        var body = document.body;
        console.log(body);
    </script>

4.7、获取html元素

语法格式: document . documentElement ;
作用:获取整个 html 元素。
示例:
   <div class="box"></div>
    <input type="text" name="" id="">
    <h1>h1</h1>
    <script>
        var html = document.documentElement;
        console.log(html);
    </script>

5、操作元素

JavaScript DOM 操作可以改变网页内容、结构和样式,因此可以利用 DOM 操作元素来改变元素里面的内容、属性等。

5.1、改变内容

DOM 中改变元素内容通常使用元素的 innerText innerHTML 属性来实现。

 示例:

    <div class="box"> 今年是<strong>2022</strong>年第一天 </div>
    <script>
        // 1. 获取元素
        var box = document.querySelector('.box');
        console.log(box);
        // 2. 获取元素的内容 
        // 2.1 innerHTML 
        var content = box.innerHTML;
        console.log(content);
        // 2.2 innerText 
        var content = box.innerText;
        console.log(content);
        // 3. 设置元素内容 
        // 3.1 innerHTML 识别htm标签,同时保留空格和换行
        box.innerHTML = '<font color="red">这是红色的字</font>';
        // 3.2 innerText 不识别html标签,不保留空格和换行
        // box.innerText = '<font color="red">这是红色的字</font>';
    </script>
innerHTML和 innerText相同点:
(1)的 innerHTML innerText 属性可以获取对象的内容;
(2)通过给对象的 innerHTML innerText 属性赋值可以改变对象的内容。
innerHTML和 innerText区别:

(1)innerHTML属性会把内容中的 html 元素解析后再执行,而 innerText 不会解析内容中的 html 元素。

(2) 如果 innerText 用于获取对象的内容,当内容中包含有 html 元素时, 获取中它会把 这个元素给删除了,而innerHTML不会。
(3) 如果innerHTML用于设置对象的内容,当内容中包含有 html 元素时,它会把这些元素 原封不动的设置给对象(不删除空格和换行),而innerText会删除空格和换行。

5.2、元素属性

DOM 中,改变元素属性是通过 元素对象 . 属性名 的方式来实现的,它同样具有读写功能。元素可操作的常用属性有:src href id alt title 以及自定义属性等。

 演示案例:

    <img src="1.jpeg">
    <script>
        var img = document.querySelector('img')
            // 获取src属性 
        console.log(img.src);
        // 修改src属性 
        img.src = '2.jpeg';
        // 添加属性 
        img.alt = '图片';
        img.title = '提示';
        console.log(img);
    </script>

5.3、表单元素

Web 开发中,表单是一种常用的元素,利用 DOM 可以操作如下表单元素的属性。

 这些属性都具有读写操作,通过 元素对象.属性名 来获取元素属性值,通过 元素对象.属性名= 值 来设置元素属性值。而 checkedselecteddisabled 元素属性的值是布尔类型。

演示案例:

    <input type="text" name="name" value="123456"><br>
    <input type="checkbox" name=""><br>
    <select name="">
        <option value="">--请选择--</option> 
        <option value="北京">北京</option> 
        <option value="上海">上海</option>
         <option value="重庆">重庆</option> 
        </select>

    <script>
        var input = document.querySelector('input')
            // 获取type
        console.log(input.type);
        // 设置type 
        //input.type = 'password'; 
        // 获取value 
        console.log(input.value);
        // 设置value 
        input.value = 'jock'
            // 获取disabled 
        console.log(input.disabled);
        // false 
        // 设置 disabled 
        input.disabled = true;
        // 获取元素 
        var ck = document.querySelector('[type="checkbox"]');
        console.log(ck);
        // 获取选中状态 
        console.log(ck.checked); // false 
        // 设置选中状态 
        ck.checked = true;
        // 获取下拉列表
        var sl = document.querySelector('select');
        console.log(sl);
        //console.log(sl[2]);
        var op = sl[2];
        console.log(op.selected);
        // 设置被选中 
        op.selected = true;
    </script>

5.4、样式元素

DOM 中可以通过 JavaScript 来修改元素的大小、颜色和位置等样式。常用方式有:

5.4.1、style

示例:
    <style>
        .box {
            width: 150px;
            height: 100px;
            background-color: blueviolet;
        }
    </style>

    <div class="box"></div>
    <script>
        // 通过 JS 来改变 div 的宽和背景颜色 
        var box = document.querySelector('.box')
            //console.log(box); 
            // 通过 style 方式
        box.style.width = '300px';
        box.style.backgroundColor = 'red';
    </script>
注意:如果样式名称中包含有连接符(-),那么连接符要去掉,同时后面的字母要大写。

5.4.2、className属性

示例:

  
<style>
        .box {
            width: 150px;
            height: 100px;
            background-color: blueviolet;
        }
        
        .bg {
            width: 200px;
            height: 200px;
            background-color: cornflowerblue;
        }
        
        .ft {
            color: white;
        }
    </style>

    <div class="box">这是文字</div>
    <script>
        // 通过 JS 来改变 div 的宽和背景颜色 
        var box = document.querySelector('.box');
        console.log(box.className);
        box.className = 'bg ft'
    </script>

说明:

(1)通过对象.className 的方式可以获取当前对象的样式名称;

(2)通过对象.className='' 的方式可以给当前对象设置样式。

5.5、操作属性、

对属性的操作也可以设置属性值,也可获取属性值。

5.5.1、setAtrribute()

这个方法可以给元素设置属性。它的语法如下:

对象名称.setAttribute('属性名', '属性值');

示例:
     <style>
        div {
            width: 100px;
            height: 30px;
            border: 1px solid #000000;
        }
        
        .bg {
            background-color: cornflowerblue;
            color: white;
        }
    </style>

  <div title="这是标题">这是内容</div>
    <script>
        var div = document.querySelector('div')
            // 设置属性 
        div.setAttribute('class', 'bg');
        div.setAttribute('title', '我改了标题');
    </script>

5.5.2、getAttribute()

这个方法是用于获取对象中的指定属性名称的值。它的语法如下:
属性值 = 对象 . getAttribute ( ' 属性名 ' ) ;
示例:
    <div title="这是标题">这是内容</div>
    <script>
        var div = document.querySelector('div')
            // 获取title属性 
            //console.log(div.title); 
        var attrValue = div.getAttribute('title');
        console.log(attrValue);
    </script>

5.5.3 removeAttribute()

这个方法是用于删除对象中指定的属性。它的语法为:
对象 . removeAttribute ( ' 属性名 ' );
示例:
    <div title="这是标题">这是内容</div>
    <script>
        var div = document.querySelector('div');
        // 删除title属性
        div.removeAttribute('title');
    </script>

5.5.4、自定义属性

自定义属性目的是为了保存并使用临时数据,这些数据不需要从数据库中获取。自定义属性是通过 setAttribute(' 属性 ', ' ') 来设置,通过 getAttribute(' 属性 ') 来获取。
由于有些自定义属性很容易引起歧义,不容易判断是元素的内置属性还是自定义属性,为了解决这种问题,H5 中规定了自定义属性都以 data - 开头来作为属性名。
H5 中规定的属性定义方式可以使用 getAttribute(' 属性 ') 方式来获取,也可以使用 H5 中新增的属性获取方式来获取。

 示例:

    <div data-index="1" data-list-name="jock"></div>
    <script>
        var div = document.querySelector('div');
        console.log(div.getAttribute('data-index'));
        div.setAttribute('data-title', '标题');
    </script>

6、DOM事件

6.1、什么是事件

所谓事件是指文档或浏览器窗口中发生的一些特定的交互瞬间。 JavaScript HTML 之间的交互 就是通过事件来实现的。对于 Web 应用来说,鼠标点击,鼠标移动,按下键盘某个键都是属于事件。而这些相应操作就会触发相应的响应机制来进行事件处理。

6.2、事件的要素

对于事件来说,它包含三个要素:事件源、事件类型和事件处理程序。
(1)事件源:触发事件的元素.
(2)事件类型:触发了哪种类型的事件,如 click mouseover focus keyup 等。
(3)事件处理程序:事件触发后要执行的程序代码,通常是一个函数。
示例:
    <button id="btn">点我会触发事件</button>
    <script>
        // 1. 获取元素
        var btn = document.querySelector('#btn')
            // 1.事件源:这个按钮就是事件源 
            // 2. 事件类型:这个按钮要点击后才会触发,那么它的事件类型就是点击事件 
            // 3. 事件处理程序 
        btn.onclick = function() {
            console.log('你点了我');
        };
    </script>

6.3、常见鼠标事件类型

DOM 事件非常多,而这些事件中使用最多最频繁的就是鼠标事件,常用的鼠标事件如下表所示。

 示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>常见鼠标事件类型</title>
    <style>
        .box {
            width: 150px;
            height: 100px;
            border: 1px solid #000000;
        }
        .bg {
            background-color: cornflowerblue;
        }
    </style>
</head>
<body>
<div class="box"></div>
<input type="text" id="account" value="123456">
<script>
    var box = document.querySelector('.box')
    // 单击事件:onclick
    /*box.onclick = function () {
        console.log('点我干嘛?');
    };
    // 双击事件:ondblclick
    box.ondblclick = function () {
        console.log('别烦我。');
    };
    */

    // 鼠标经过时触发:onmouseover
    box.onmouseover = function () {
        this.className = 'box bg';
    };
    // 鼠标离开时触发:onmouseout
    box.onmouseout = function () {
        this.className = 'box';
    };
    // 鼠标移动时触发:onmousemove
    box.onmousemove = function () {
        console.log('你摸我干嘛');
    };

    var input = document.querySelector('#account')
    // 获取鼠标焦点时触发:onfocus
    input.onfocus = function () {
        //console.log(this.value)
        this.style.backgroundColor = 'cornflowerblue';
    };
    // 失去鼠标焦点时触发:onblur
    input.onblur = function () {
        this.style.backgroundColor = '';
        console.log(this.value);
    };

    // 文本框内容改变时触发:onchange
    input.onchange = function () {
        console.log('内容已经被修改');
    };

    // 文本框内容被选中时触发:onselect
    input.onselect = function () {
        console.log('我不想当干部');
    };
</script>
</body>
</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DOM(文档对象模型) 的相关文章

随机推荐

  • git如何查看项目的分支和转换分支来提交代码

    要查看Git项目中的所有分支 可以使用以下命令 git branch 该命令会列出当前仓库中所有本地分支 其中 带有 符号的分支表示当前所在的分支 要切换到特定的分支并提交代码 可以使用以下命令 git checkout
  • 【华为机试真题 JAVA】字符串重新排列-100

    题目描述 给定一个字符串s s包括以空格分隔的若干个单词 请对s进行如下处理后输出 1 单词内部调整 对每个单词字母重新按字典序排序 2 单词间顺序调整 1 统计每个单词出现的次数 并按次数降序排列 2 次数相同 按单词长度升序排列 3 次
  • 深入理解计算机系统Lab3实验

    目录 实验准备 实验资源的准备 生成ctarget等文件的反汇编代码 确定实验环境是大端还是小端 实验进行 Phase1 简述 测试 分析 目标 找到touch1的代码并重写 并且 找到getbuf 函数中 为Get 函数所开辟的字符串最大
  • 数据治理-数据质量-数据质量实施方法

    质量实施方法 数据质量领域研究学者和专家结合自身实践 先后提出了一系列质量管理得项目实施方法 其中以全面信息质量管理 全面数据质量管理 数据管理十步法 六西格玛等 与传统数据质量管理一样 数据GIGO规则仍然发挥作用 但在由于大数据的多样性
  • Python 套接字 Accept 超时

    套接字是网络通信的基本构建块 每当两个网络实体需要传输数据时 就会打开一个套接字 这些套接字在会话期间保持连接 但有时 在 Python 中使用套接字时 您可能会等待很长时间 而另一端仍然接受套接字连接 本文讨论了 Python 中套接字的
  • 好书推荐《R语言在定量金融中的应用》

    给大家推荐一本R语言在定量金融方面的好书 是我老师编写的 我也非常有幸参与到这本书的编写过程中 这本书2015年5月份正式上线 其实从2013年底开始写的 经历大约两年的时间 这本书一出来就收到了很大的关注 读者反映都很好 这本书本身是属于
  • HIVE中数据更新(update)操作的实现

    数据更新是一种常见的操作 然后数据仓库的概念一般要求的是数据是集成 稳定的 HIVE作为一种分布式环境下以HDFS为支撑的数据仓库 它同样更多的要求数据是不可变的 然而现实很多任务中 往往需要对数据进行更新操作 经查 Hive自0 11版本
  • 蓝牙模块四大天线方式

    在蓝牙产品中 天线与蓝牙模块的关系是相辅相成的 是一个除了作为核心的系统芯片外 天线是另一个具有影响蓝牙模块传输特性的关键性组件 首先简单概述什么是天线 天线是一种用来发送或者接收电磁波的器件 天线的作用 发射天线的作用是将发射机的高频电流
  • flex布局导致ellispsis失效

    问题描述 之前的文本超过长度省略文章中 讲到了如何通过CSS控制文本超过长度省略 但是在flex布局中 ellispis却失效了 举例说明 文档结构如下 div class container div class div 1 div div
  • 【Java 实现微信支付、Native 支付流程】,从编写代码到支付成功,一步到位!

    文章目录 1 项目环境介绍 2 微信支付文档 2 1 业务流程说明 3 准备信息 3 1 微信公众账号如何获取 3 2 商户号如何获取 3 3 API密钥如何获取 3 4 准备工具类 4 进入开发阶段 4 1 后端编写 生成微信支付二维码
  • 网格搜索(Grid Search)/超参搜索

    1 网格搜索法 网格搜索法 Grid Search 是一种在机器学习中用于确定最佳模型超参数的方法之一 在机器学习中 超参数是指在训练模型之前需要手动设置的参数 而不是通过学习过程中自动学习得到的参数 网格搜索法通过指定一个超参数的候选值列
  • softmax(三):softmax交叉熵的缺点

    还是废话不说 直接上峰神的链接 Softmax理解之Smooth程度控制 softmax交叉熵我们经常使用 但是为啥有的任务 用softmax交叉熵效果很好 有的任务用效果却不怎么样 在实际项目中 分析softmax交叉熵的缺点 才能知道
  • Activity MQ生产/消费和订阅/发布的区别

    1 在有多个消息接收者时 生产 消费模式下多个消费者会轮流消费队列中的消息 2 而订阅 发布模式下所有订阅者都会得到所有的消息 1 生产和消费 生产者生产消息放到队列里 多个消费者同时监听队列 谁先抢到消息谁就会从队列中取走消息 即对于每个
  • any_value()

    目录 any value ONLY FULL GROUP BY 查看ONLY FULL GROUP BY 解决方法 any value ONLY FULL GROUP BY MySQL5 7之后 sql mode中ONLY FULL GRO
  • gfortran版本

    gcc里面已经集成了gfortran吧
  • JDBC ResultSet获取Date类型相关

    前段时间发现用自己写的工具类获取数据库信息的时候 使用getString来获取数据库date类型的数据时 获取的格式为 yyyy mm dd hh mi ss z精度会一直到毫秒 这个实在是郁闷 而使用getDate来获取 则是只有日期没有
  • 【数据结构】动图详解二叉树——堆及堆排序

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 目录 一 树的概念 1 树的特征 2 树的相关名词 二 树的表示
  • 抗锯齿相关技术介绍:MSAA、FXAA、SMAA、TXAA、MSAA

    在图像处理中 锯齿一直是一个大问题 因此图像中的抗锯齿 Anti aliaing 简称AA 也被称为边缘柔化 消除混叠 抗图像折叠有损等 AA主要是处理图像有锯齿的边缘 使其图像更清晰清晰 下面有一些反锯齿的常用技术 一 多重采样抗锯齿 M
  • 36 KVM管理设备-配置虚拟串口

    文章目录 36 KVM管理设备 配置虚拟串口 36 1 概述 36 2 操作步骤 36 KVM管理设备 配置虚拟串口 36 1 概述 在虚拟化环境下 由于管理和业务的需求 虚拟机与宿主机需要互相通信 但在云管理系统复杂的网络架构下 运行在管
  • DOM(文档对象模型)

    目录 1 DOM是什么 2 DOM 树 3 节点 4 获取元素 4 1 根据id获取 4 2 根据标签名获取 4 3 根据 name 属性来获取 4 4 根据类名来获取 4 5 根据选择器获取 4 6 获取body元素 4 7 获取html