什么是DOM? Document Object Model

文档指的是HTML文档

当浏览器打开一个网页的时候,实际上把HTML文档读取到内存中进行解析

整个HTML文档被封装为document文档对象,其里面各个标签被解析成文档对象的各个元素

这些元素和文档对象形成了一种树形结构,又被称为是DOM树

基于这样的对象结构,我们可以使用JS来操作DOM

JavaScript 能够改变页面中的所有 HTML 元素
JavaScript 能够改变页面中的所有 HTML 属性
JavaScript 能够改变页面中的所有 CSS 样式
JavaScript 能够对页面中的所有事件做出反应

查找 HTML 元素

JS可以像CSS一样根据选择器来获取HTML元素

基础的三种:

- 标签选择

- 类选择

- 属性选择

    let elementById = document.getElementById("id属性的值");

    // 类属性可以被多个html元素使用,所以返回的是一个数组
let elementsByClassName = document.getElementsByClassName("class属性的值"); // 按照html元素的名称查询,因为具备多个同名的元素,所以返回一个元素的数组
let elementsByTagName = document.getElementsByTagName("标签的名称");

改变HTML内容

document.write() 可用于直接向 HTML 输出流写内容。

document.write(Date());

【绝对不要在文档(DOM)加载完成之后使用 document.write()。这会覆盖该文档】

修改 HTML 内容的最简单的方法是使用 innerHTML 属性。

如需改变 HTML 元素的内容,请使用这个语法:

document.getElementById(id).innerHTML=新的 HTML

修改html元素的内容

<p id="p1">Hello World!</p>

<script>
document.getElementById("p1").innerHTML="新文本!";
</script>

改变 HTML 元素的属性,请使用这个语法:

document.getElementById(id).attribute=新属性值

改变 HTML 元素的样式,请使用这个语法:

document.getElementById(id).style.property=新样式

改变文本样式:

<p id="p1">Hello World!</p>
<p id="p2">Hello World!</p>
<script>
document.getElementById("p2").style.color="blue";
document.getElementById("p2").style.fontFamily="Arial";
document.getElementById("p2").style.fontSize="larger";
</script>
<p>以上段落通过脚本修改。</p>

或者通过事件的触发来修改

<h1 id="id1">我的标题 1</h1>
<button type="button"
onclick="document.getElementById('id1').style.color='red'">
点我!</button>

DOM事件

DOM对象可以让JavaScript 有能力对 HTML 得事件做出反应。

在事件发生时执行 JavaScript,比如当用户在 HTML 元素上点击时。

如需在用户点击某个元素时执行代码,请向一个 HTML 事件属性添加 JavaScript 代码:

事件类型 = 要执行的JS代码

onclick=JavaScript

点击这个H1标签会变更这个标签的内容

<h1 onclick="this.innerHTML='Ooops!'">点击文本!</h1>

或者是用JS脚本声明函数对象来绑定使用

<script>
function changetext(id)
{
id.innerHTML="Ooops!";
}
</script>
<h1 onclick="changetext(this)">点击文本!</h1>

DOM 允许使用 JavaScript 来向 HTML 元素分配事件:

<script>
document.getElementById("myBtn").onclick=function(){displayDate()};
</script>

主要事件的描述:

onload:用户进入页面时触发

  可用于检测访问者的浏览器类型和浏览器版本,

  并基于这些信息来加载网页的正确版本。

onunload:用户离开页面时触发

  上述两者皆可以处理可用于处理 cookie。

onmouseover:鼠标移入元素区时域触发

onmouseout:鼠标移出元素区域时触发

onmousedown:鼠标按下时触发

onmouseup:鼠标松开时触发

onclick:鼠标左键点击时触发[就相当于上面2个事件的结合]

事件监听器 eventListener

样例:

document.getElementById("myBtn").addEventListener("click", displayDate);

addEventListener() 方法:

- 用于向指定元素添加事件句柄。

- 添加的事件句柄不会覆盖已存在的事件句柄

- 向一个元素添加多个事件句柄

- 向同个元素添加多个同类型的事件句柄,如:两个 "click" 事件。

- 向任何 DOM 对象添加事件监听,不仅仅是 HTML 元素。如: window 对象。

- 可以更简单的控制事件(冒泡与捕获)。

- JavaScript 从 HTML 标记中分离开来,可读性更强, 在没有控制HTML标记时也可以添加事件监听。

  你可以使用 removeEventListener() 方法来移除事件的监听。

语法Syntax

element.addEventListener(event, function, useCapture);

第一个参数是事件的类型 (如 "click" 或 "mousedown").

第二个参数是事件触发后调用的函数。

第三个参数是个布尔值用于描述事件是冒泡还是捕获。该参数是可选的。

演示案例:

当用户点击元素时弹出 "Hello World!" :

element.addEventListener("click", function(){ alert("Hello World!"); });

把函数单独挪出来写

element.addEventListener("click", myFunction);

function myFunction() {
alert ("Hello World!");
}

允许多个函数触发

element.addEventListener("click", myFunction);
element.addEventListener("click", mySecondFunction);

允许不同事件类型,且多个

element.addEventListener("mouseover", myFunction);
element.addEventListener("click", mySecondFunction);
element.addEventListener("mouseout", myThirdFunction);

还可以通过事件来传递参数

element.addEventListener("click", function(){ myFunction(p1, p2); });

事件传递有两种方式:冒泡与捕获。

事件传递定义了元素事件触发的顺序。 如果你将 <p> 元素插入到 <div> 元素中,用户点击 <p> 元素, 哪个元素的 "click" 事件先被触发呢?

在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即: <p> 元素的点击事件先触发,然后会触发 <div> 元素的点击事件。

在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即: <div> 元素的点击事件先触发 ,然后再触发 <p> 元素的点击事件。

addEventListener() 方法可以指定 "useCapture" 参数来设置传递类型

addEventListener(eventfunctionuseCapture);

默认值为 false, 即冒泡传递,当值为 true 时, 事件使用捕获传递。

案例

document.getElementById("myDiv").addEventListener("click", myFunction, true);

移除事件:

移除由 addEventListener() 方法添加的事件句柄:

element.removeEventListener("mousemove", myFunction);

【JS】04 DOM 文档对象模型 P1 查找元素、改变内容、绑定事件的更多相关文章

  1. js/jq 动态添加的元素不能触发绑定事件解决方案

    <!-- Copyright 2017-10-27, Jachin QQ: 381558301 Email: 381558301@qq.com 请看看你们的版本并对号入座: jquery1.6版 ...

  2. js与DOM初步:访问html元素

    1.DOM简介 DOM= Document Object Model,文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构.换句话说,这是表示和处理一个HTML或XML文 ...

  3. html--JavaScript之DOM (文档对象模型)

    一.简介 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 定义了用于 HTML 的一系列标准的对象,以及访问和处理 HTML 文档的标 ...

  4. JavaScript(三、DOM文档对象模型)

    一.什么是DOM DOM 是 Document Object Model(文档对象模型)的缩写. DOM 是 W3C(万维网联盟)的标准. DOM 定义了访问 HTML 和 XML 文档的标准: &q ...

  5. DOM文档对象模型简介

    DOM简介     DOM是W3C(万维网联盟)的标准 "W3C文档对象模型DOM是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容.结构.样式".W3C DOM ...

  6. javascript之DOM文档对象模型编程的引入

    /* DOM(Document Object Model) 文档对象模型 一个html页面被浏览器加载的时候,浏览器就会对整个html页面上的所有标签都会创建一个对应的 对象进行描述,我们在浏览器上看 ...

  7. js,jq新增元素 ,on绑定事件无效

    在jquery1.7之后,建议使用on来绑定事件. $('.upload a').on('click',function(){ $(this).remove(); }) 在DOM渲染的时候,也就是ht ...

  8. jquery appaend元素中id绑定事件失效问题

    1. 在jquery中append元素,如果该元素中有id值并且绑定事件,那么该id事件会失效,必须刷新一下才能使用. 2.解决办法: 举例:如果在一个<div class="titl ...

  9. dom文档对象模型图

  10. 文档对象模型 DOM

    1 DOM概述 1.1 什么是DOM 文档对象模型 Document Object Model 文档对象模型 是表示和操作 HTML和XML文档内容的基础API 文档对象模型,是W3C组织推荐的处理可 ...

随机推荐

  1. kettle从入门到精通 第十六课 kettle 映射 (子转换)02

    1.上节讲的子映射里面只有一个转换(类似一个java类里面只有一个公共方法),本次讲解的有两个,实际上可以有任意多个(一个java类里面有多个公共方法).两个转换分别计算x+y和x*y. 2.命名参数 ...

  2. INFINI Labs 产品更新 | Easysearch 优化字段压缩提升写入速度,Console 优化数据迁移和校验等功能

    INFINI Labs 产品又更新啦~.本次更新概要如下:Easysearch 增强 source_reuse 压缩功能,并大幅提升写入速度:Console 优化了数据迁移和校验功能,新增了通用的数据 ...

  3. C#.NET Winform承载WCF RESTful API (App.config 方式)

    1.新建一个名为"WindowsForms承载WCF"的WINFORM程序. 2.在解决方案里添加一个"WCF 服务库"的项目,名为"WcfYeah& ...

  4. FlashDuty Changelog 2023-12-18 | 值班管理、服务日历、自定义操作和邮件集成

    FlashDuty:一站式告警响应平台,前往此地址免费体验! 值班管理 UI 交互优化 [个人日程]从头像下拉菜单调整到值班列表页面,快速查看个人值班日程 [值班列表]支持原地预览最近一周值班情况,包 ...

  5. flutter+Springboot的结合

    我们团队的开发 前端采用flutter 后端采用spring boot 首先 完成了app的图标名字的修改 在app/src/main/res/mipmap 目录中 存放app图标 图片 在Andro ...

  6. axios 下载文件流

    axios 下载文件流 背景:在处理文件下载时,服务端存在校验,需要在请求头里添加token 这时直接使用 a 标签就不能满足需求.接下来我们直接通过 axios 请求,在请求头里设置 token 请 ...

  7. 判断日期是否为周六周日,BigDecimal比较大小

    判断日期是否为周六周日,BigDecimal比较大小 package com.example.core.mydemo.date; import java.math.BigDecimal; import ...

  8. MySQL bit类型增加索引后查询结果不正确案例浅析

    昨天同事遇到的一个案例,这里简单描述一下:一个表里面有一个bit类型的字段,同事在优化相关SQL的过程中,给这个表的bit类型的字段新增了一个索引,然后测试验证 时,居然发现SQL语句执行结果跟不加索 ...

  9. k8s健康检查(探针Probe)之LivenessProbe、ReadinessProbe和StartupProbe

    背景 集群正常服务时,会出现容器死掉问题,如宿主机故障.资源不足.下游故障等.这个时候容器需要从endpoints摘除(容器挂了就不能接流了),并执行它的restart策略. LivenessProb ...

  10. 全国产!全志T3+Logos FPGA核心板(4核ARM Cortex-A7)规格书

    核心板简介 创龙科技SOM-TLT3F是一款基于全志科技T3四核ARM Cortex-A7处理器 + 紫光同创Logos PGL25G/PGL50G FPGA设计的异构多核全国产工业核心板,ARM C ...