DOM的介绍
一 . DOM 介绍
什么是DOM
DOM:文档对象模型。DOM 为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构。目的其实就是为了能让js操作html元素而制定的一个规范。
DOM就是由节点组成的
解析过程
HTML加载完毕,渲染引擎会在内存中把HTML文档,生成一个DOM树,getElementById是获取内中DOM上的元素节点。然后操作的时候修改的是该元素的属性.
DOM 数(一切都是节点)

上图可知,在HTML当中,一切都是节点:(非常重要)
元素节点:HMTL标签。
文本节点:标签中的文字(比如标签之间的空格、换行)
属性节点::标签的属性。
整个html文档就是一个文档节点。所有的节点都是Object。
DOM可以做什么
● 找对象(元素节点)
● 设置元素的属性值
● 设置元素的样式
● 动态创建和删除元素
● 事件的触发响应: 事件源 , 事件 , 事件的驱动程序
DOM节点的获取
DOM节点的获取方式其实就是 获取事件源的方式.
操作元素节点,必须首先找到该节点,有三种方式获取DOM节点 :
<div id="box1" class="box"></div>
<script>
//方法一 : 通过 id 获取单个标签
var div1 = document.getElementById("box1");
// 方法二 : 通过 标签名 获取标签数组 ,有 s
var arr1 = document.getElementsByTagName("div");
// 方法三 : 通过 类名 获取标签数组,所以有 s
var arr2 = document.getElementsByClassName("box"); </script>
因为 方法二 / 方法三 获取的是标签数组,那么要先遍历之后再使用.
特殊情况 : 数组中的值只有1个 , 即使如此,这个值也是包在数组里的,所以这个值获取方法 :
<div id="box1" class="box"></div> // 获取数组中的第一个元素
var arr1 = document.getElementsByTagName("div")[0]; //获取数组中的第一个元素
var arr2 = document.getElementsByClassName("box")[0];
<div id="div1">
<div class="div2">i am div2</div>
<div name="yuan">i am div2</div>
<div id="div3">i am div2</div>
<p>hello p</p>
</div>
<script>
var div1=document.getElementById("div1");
////支持;
// var ele= div1.getElementsByTagName("p");
// alert(ele.length);
////支持
// var ele2=div1.getElementsByClassName("div2");
// alert(ele2.length);
////不支持
// var ele3=div1.getElementById("div3");
// alert(ele3.length);
////不支持
// var ele4=div1.getElementsByName("yuan");
// alert(ele4.length)
</script>
局部查找
DOM访问关系的获取
DOM的节点并不是孤独的,因此可以通过DOM节点之间的相对关系对他们进行访问.如下 :

节点的访问关系,是以属性的方式存在的.
JS中的 父子兄 访问关系 :

节点树种的节点彼此拥有层级的关系 :
父(parent),子(child),兄(sibling) 等来描述这些关系.父节点拥有子节点.同级的子节点被称为同胞(兄弟或者姐妹).
获取父节点
调用者就是节点.一个节点只有一个父节点.调用方法 :
<div id="father">
<div id="laoda"></div>
<div id="laoer"></div>
</div>
<script> var oLaoda = document.getElementById('father');
var.a = oLoda.parentNode // 获取父节点 </script>
节点.parentNode // 调用父节点 nextsibling // 下一个节点(包括标签/空文档/换行节点)
nextElementsibling // 下一个元素节点(标签) 综合属性 :
下一个兄弟节点 = 节点.nextElementSibling || 节点.nextSibling previousSibling // 前一个节点(包括标签/空文档/换行节点)
previousElementSibling // 前一个元素节点(标签) 综合节点 :
前一个兄弟节点 = 节点.previousElementSibling || 节点.previousSibling 节点自己.parentNode.children[index]; //随意得到兄弟节点 firstChild // 第一个子元素节点(标签)
firstElementChild //第一个子元素节点(标签) lastChild / lastElementChild //最后一个子元素节点 children / childNodes // 获取所以的子节点
*****
子节点数组 = 父节点.children; //获取所有节点。用的最多。
注意 : nodeType ==1 表示的是元素节点(标签) . 元素就是标签
★★★★★★ DOM 节点的操作
节点的访问关系都是属性
节点的操作都是属性(方法)
创建节点
格式如下 :
新的标签(元素节点) = document.createElement("标签名");
//例如 :
var tag = document.creatElement("input");
tag.setAttribute("type","text");
示例 : 比如我们要创建一个一个 li 标签,或者是创建一个不存在的 abcd 标签:
<script type="text/javascript">
var a1 = document.createElement("li");
var a2 = document.createElement("abcd"); console.log(a1);
console.log(a2); console.log(typeof a1);
console.log(typeof a2); </script>
结果 :

插入节点
插入节点的方式有两种,分别有不同的含义 :
方式一 :
父节点.appendChild(新的子节点); // 父节点的最后插入一个新的子节点
方式二 :
父节点.insertBrfore(新的子节点,作为参考的子节点); // 在参考点钱插入一个新的节点
// 如果参考节点为 null(空),那么他将在父节点最后插入一个子节点
删除节点
父节点.removeChild(子节点); // 用父节点删除子节点,必须要指定删除那个子节点
如果想删除自己这个节点 :
node1.parentNode.ramoveChild(node1);
复制节点(克隆节点)
要复制的节点.cloneNode(); 要复制的节点.cloneNode(true);
括号内带不带参数,效果是不一样的 :
不带参数 / 带参数 false : 值复制节点本身,不复制子节点.
带参数 true : 即复制节点本身,也复制其所有的子节点.
替换节点
父节点.replaceChild(newnode,某个节点)
节点属性操作
1. 获取本节点的值 : innerText innerHTML
2. attribute 操作
elementNode(元素节点).setAttribute(name(属性名),value(新的属性值)) //设置节点属性值
elementNode.getAttribute(属性名) <-------------->elementNode.属性名(DHTML)
elementNode.removeAttribute(“属性名”); //删除节点属性
3 . value 获取当前选择的value值
1 . input
2 . select (selectedindex)
3 . textarea
4 . innerHTML 给节点添加 html 代码 :
该方法不是 w3c 的标准, 但是主流浏览器支持
tag.innerHTML = "<p>要显示的内容</p>";
5 . 关于 class 操作
elementNode.className
elementNode.classList.add
elementNode.classList.remove
6 . 改变 css 样式 :
<p id="p2">Hello world!</p>
document.getElementById("p2").style.color="blue";
.style.fontSize=48px
二 . 关于DOM的事件操作
JavaScript的组成
JavaScript 基础分成三部分 :
(1) . ECMAScript:JavaScript的语法标准。包括变量、表达式、运算符、函数、if语句、for语句等。
(2) . DOM:文档对象模型,操作网页上的元素的API。比如让盒子移动、变色、轮播图等。
(3) . BOM:浏览器对象模型,操作浏览器部分功能的API。比如让浏览器自动滚动。
事件
JS是以事件驱动为核心的一门语言。
事件三要素
事件的三要素:事件源、事件、事件驱动程序。
比如,我用手去按开关,灯亮了。这件事情里,事件源是:手。事件是:按开关。事件驱动程序是:灯的开和关。
再比如,网页上弹出一个广告,我点击右上角的X,广告就关闭了。这件事情里,事件源是:X。事件是:onclick。事件驱动程序是:广告关闭了。
于是我们可以总结出:谁引发的后续事件,谁就是事件源。
总结如下:
事件源:引发后续事件的html标签。
事件:js已经定义好了(见下图)。
事件驱动程序:对样式和html的操作。也就是DOM。
代码书写步骤如下:(重要)
(1)获取事件源:document.getElementById(“box”); //类似与ios语言的 UIButton *adBtn = [UIButton buttonWithType:UIButtonTypeCustom];
(2)绑定事件: 事件源box.事件onclick = function(){ 事件驱动程序 };
(3)书写事件驱动程序:关于DOM的操作
代码举例:
<body>
<div id="box1"></div> <script type="text/javascript">
// 1、获取事件源
var div = document.getElementById("box1");
// 2、绑定事件
div.onclick = function () {
// 3、书写事件驱动程序
alert("我是弹出的内容");
}
</script> </body>
事件类型
onclick 当用户点击某个对象时调用的事件句柄。
ondblclick 当用户双击某个对象时调用的事件句柄。 onfocus 元素获得焦点。 练习:输入框
onblur 元素失去焦点。 应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
onchange 域的内容被改变。 应用场景:通常用于表单元素,当元素内容被改变时触发.(三级联动) onkeydown 某个键盘按键被按下。 应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
onkeypress 某个键盘按键被按下并松开。
onkeyup 某个键盘按键被松开。 onload 一张页面或一幅图像完成加载。 onmousedown 鼠标按钮被按下。
onmousemove 鼠标被移动。
onmouseout 鼠标从某元素移开。
onmouseover 鼠标移到某元素之上。
onmouseleave 鼠标从元素离开 onselect 文本被选中。
onsubmit 确认按钮被点击。
针对事件的三要素
1. 获取事件源 的方式(DOM节点的获取)
var div1 = document.getElementById("box1"); //方式一:通过id获取单个标签
var arr1 = document.getElementsByTagName("div1"); //方式二:通过 标签名 获得 标签数组,所以有s
var arr2 = document.getElementsByClassName("hehe"); //方式三:通过 类名 获得 标签数组,所以有s
2 . 绑定事件的方式 :
方式一 : 直接绑定匿名函数
<div id="box1" ></div> <script type="text/javascript">
var div1 = document.getElementById("box1");
//绑定事件的第一种方式
div1.onclick = function () {
alert("我是弹出的内容");
}
</script>
方式二 : 先单独定义函数,在绑定
<div id="box1" ></div> <script type="text/javascript">
var div1 = document.getElementById("box1");
//绑定事件的第二种方式
div1.onclick = fn; //注意,这里是fn,不是fn()。fn()指的是返回值。
//单独定义函数
function fn() {
alert("我是弹出的内容");
}
</script>
注意上方的注释.绑定的时候,写 fn 而不是写 fn() , fn 代表的是整个函数, fn()代表的是返回值
方式 三 : 行内绑定
<!--行内绑定-->
<div id="box1" onclick="fn()"></div> <script type="text/javascript"> function fn() {
alert("我是弹出的内容");
} </script>
注意第一行代码,绑定时,是写的"fn()",不是写的"fn"。因为绑定的这段代码不是写在js代码里的,而是被识别成了字符串。
3 . 事件驱动程序 :
<style>
#box {
width: 100px;
height: 100px;
background-color: pink;
cursor: pointer; //把鼠标变成小手的模样
}
</style>
</head> <body> <div id="box" ></div> <script type="text/javascript">
var oDiv = document.getElementById("box");
//点击鼠标时,原本粉色的div变大了,背景变红了
oDiv.onclick = function () {
oDiv.style.width = "200px"; //属性值要写引号
oDiv.style.height = "200px";
oDiv.style.backgroundColor = "red"; //属性名是backgroundColor,不是background-Color
}
</script>
上方代码的注意事项:
- 在js里写属性值时,要用引号
- 在js里写属性名时,是
backgroundColor,不是CSS里面的background-Color。记得所有的像css属性的text-*,line-*、backgroun-*等在js中都写成驼峰
onload 事件
当页面加载(文本和图片)完毕的时候,触发onload事件。
举例:
<script type="text/javascript">
window.onload = function () {
console.log("小马哥"); //等页面加载完毕时,打印字符串
}
</script>
有一点我们要知道:js的加载是和html同步加载的。因此,如果使用元素在定义元素之前,容易报错。这个时候,onload事件就能派上用场了,我们可以把使用元素的代码放在onload里,就能保证这段代码是最后执行。
建议是:整个页面上所有元素加载完毕在执行js内容。所以,window.onload可以预防使用标签在定义标签之前。
示例 : 当鼠标悬停在img上时,更换为另外一张图片;鼠标离开时,还原为本来的图片。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script>
//window.onload页面加载完毕以后再执行此代码
window.onload = function () {
//需求:鼠标放到img上,更换为另一张图片,也就是修改路径(src的值)。
//步骤:
//1.获取事件源
//2.绑定事件
//3.书写事件驱动程序 //1.获取事件源
var img = document.getElementById("box");
//2.绑定事件(悬停事件:鼠标进入到事件源中立即出发事件)
img.onmouseover = function () {
//3.书写事件驱动程序(修改src)
img.src = "image/jd2.png";
// this.src = "image/jd2.png";
} //1.获取事件源
var img = document.getElementById("box");
//2.绑定事件(悬停事件:鼠标进入到事件源中立即出发事件)
img.onmouseout = function () {
//3.书写事件驱动程序(修改src)
img.src = "image/jd1.png";
}
}
</script>
</head>
<body> <img id="box" src="data:image/jd1.png" style="cursor: pointer;border: 1px solid #ccc;"/> </body>
</html>
DOM操作的相关案例--->>>>■■■■■
DOM的介绍的更多相关文章
- 前端 --- 关于DOM的介绍
111 什么是DOM DOM:文档对象模型.DOM 为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构.目的其实就是为了能让js操作html元素而制定的一个规范. DOM就是由节点组成的. 解 ...
- DOM【介绍、HTML中的DOM、XML中的DOM】
什么是DOM? DOM(Document Object Model)文档对象模型,是语言和平台的中立接口. 允许程序和脚本动态地访问和更新文档的内容. 为什么要使用DOM? Dom技术使得用户页面可以 ...
- 前端基础-BOM和DOM的介绍
阅读目录 BOM和DOM的简述 DOM详细操作 事件 一.BOM和DOM的简述 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我 ...
- HTML DOM 节点介绍(nodeName,nodeValue,nodeType)
对于初学者来说,HTML DOM 里面的 nodeName.nodeValue 以及 nodeType 三个属性的作用和取值不是很清楚.下面整理的信息包含有关于节点的详细信息,供参考. 节点信息 每个 ...
- javascript HTML DOM 简单介绍
JavaScript HTML DOM通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素.HTML DOM (文档对象模型)当网页被加载时,浏览器会创建页面的文档对象模型( ...
- 轻松学习JavaScript十八:DOM编程学习之DOM简单介绍
一DOM概述 DOM(文档对象模型)是HTML和XML的应用程序接口(API).DOM将把整个页面规划成由节点层级构成的文档. DOM描绘了一个层次化的节点树,执行开发者加入,移除和改动页面的某一部分 ...
- dom 的介绍
直接上干货 ...网址在此,,,,, <a href="https://developer.mozilla.org/zh-CN/docs/Web/API/Document_Object ...
- HTML DOM 介绍
本篇主要介绍DOM内容.DOM 节点.节点属性以及获取HTML元素的方法. 目录 1. 介绍 DOM:介绍DOM,以及对DOM分类和功能的说明. 2. DOM 节点:介绍DOM节点分类和节点层次. 3 ...
- Dom对象总结介绍&事件介绍&增删查找标签
1.dom有5个属性,属性内容如下 下面开始介绍Dom属性,一共有5个属性 1.document object:文档对象 2.element object:标签对象 3.test object:文本对 ...
随机推荐
- Mac搭建python环境
1 安装xcode 2 安装 brew ruby-e"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/mast ...
- EasyMvc入门教程-基本控件说明(11)菜单导航
基本上,是个网站就会有菜单导航,目前流行的菜单是不是这样样子的? 似乎是bootstrap引领的风格,我们就用EasyMvc实现吧,上代码: @{ var data = new List<Men ...
- oracle手动修改listener.ora和tnsnames.ora之后竟然无效
oracle手动修改listener.ora和tnsnames.ora之后竟然无效 花式重启都没有生效,需要使用Net Configuration Assistant来进行刷一下,重新生成的监听还是一 ...
- 报错: Access restriction: The type JPEGImageEncoder is not accessible due to restriction on required library
报错: Access restriction:The type JPEGCodec is not accessible due to restriction on required library C ...
- HTTP错误状态码定位与解决
实践总结 本次基于对500错误定位为例,给大家讲解整个分析过程与解决方法. 1.本次实践为HTTP错误状态码定位提供一个高效.精确的定位方式,不仅仅局限于500错误. 2.针对500错误本身,可以基于 ...
- imagemagick imagick
imagemagick#图像处理软件 安装解压 ./configure make make install imagick#是php图像扩展模块 调用imagemagick处理图像 安装解压/opt/ ...
- Docker 开源管理工具集锦
俗话说工欲善其事.必先利其器.Docker 是一种详细的虚拟化技术,Docker 尽管以RestAPI形式提供服务.但在实际生产环境中,管理大规模集群部署的Docker容器确实是一个巨大的挑战.尽管D ...
- linux 查找并操作
find -depth 1 -name 'aa*' | xargs tar -cvf aa.tar 这个命令将为查找当前目录下的所有已aa开头的文件,然后将所有结果"执行打包",打 ...
- OOA/OOD/OOP的区别
http://javajiao.iteye.com/blog/152956这是一个故事: "工程師修了一條隧道,隧道的一端就是美麗的風景,很多人會開車通過隧道.雖然隧道內已經有燈了,但是設計 ...
- Source Insight 4.0 破解和使用
参考出处: https://blog.csdn.net/u011604775/article/details/81698062 https://blog.csdn.net/user11223344ab ...