一 . 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的介绍的更多相关文章

  1. 前端 --- 关于DOM的介绍

    111 什么是DOM DOM:文档对象模型.DOM 为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构.目的其实就是为了能让js操作html元素而制定的一个规范. DOM就是由节点组成的. 解 ...

  2. DOM【介绍、HTML中的DOM、XML中的DOM】

    什么是DOM? DOM(Document Object Model)文档对象模型,是语言和平台的中立接口. 允许程序和脚本动态地访问和更新文档的内容. 为什么要使用DOM? Dom技术使得用户页面可以 ...

  3. 前端基础-BOM和DOM的介绍

    阅读目录 BOM和DOM的简述 DOM详细操作 事件 一.BOM和DOM的简述 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我 ...

  4. HTML DOM 节点介绍(nodeName,nodeValue,nodeType)

    对于初学者来说,HTML DOM 里面的 nodeName.nodeValue 以及 nodeType 三个属性的作用和取值不是很清楚.下面整理的信息包含有关于节点的详细信息,供参考. 节点信息 每个 ...

  5. javascript HTML DOM 简单介绍

    JavaScript HTML DOM通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素.HTML DOM (文档对象模型)当网页被加载时,浏览器会创建页面的文档对象模型( ...

  6. 轻松学习JavaScript十八:DOM编程学习之DOM简单介绍

    一DOM概述 DOM(文档对象模型)是HTML和XML的应用程序接口(API).DOM将把整个页面规划成由节点层级构成的文档. DOM描绘了一个层次化的节点树,执行开发者加入,移除和改动页面的某一部分 ...

  7. dom 的介绍

    直接上干货 ...网址在此,,,,, <a href="https://developer.mozilla.org/zh-CN/docs/Web/API/Document_Object ...

  8. HTML DOM 介绍

    本篇主要介绍DOM内容.DOM 节点.节点属性以及获取HTML元素的方法. 目录 1. 介绍 DOM:介绍DOM,以及对DOM分类和功能的说明. 2. DOM 节点:介绍DOM节点分类和节点层次. 3 ...

  9. Dom对象总结介绍&事件介绍&增删查找标签

    1.dom有5个属性,属性内容如下 下面开始介绍Dom属性,一共有5个属性 1.document object:文档对象 2.element object:标签对象 3.test object:文本对 ...

随机推荐

  1. 《C++编程思想》第二章 数 据 抽 象(原书代码+习题+答案)

    相关代码例如以下: 1. <span style="font-size:18px;">/*声明与定义的差别*/ #include <iostream> us ...

  2. docker selinux-enabled作用

    一.现象 在docker中有一个运行选项是selinux-enabled.这个选项的作用是啥? 简而言之,它提供了对docker容器中进程的selinux的控制支持.下面举例说明. 首先按照官方文档的 ...

  3. 【温故知新】——HTML基础重要知识点复习

    前言:本文是自己在学习课程中的课程笔记,这里用来温故知新的,并非本人原创. 一.HTML快速入门(重点) 1.HTML概述 1.什么是HTML HTML : Hyper Text Markup Lan ...

  4. JAVA Eclipse ActivityManager Warning Activity not started, its current task has been brought to the front怎么办

    Eclipse运行提示Activity not started,因为当前程序已经在运行,需要退出当前程序再测试

  5. windows的iis做后门,隐藏访问,无日志

    windows下的iis5/iis6做后门,隐藏访问,不留访问记录或者不留日志 好不容易攻下一台Windows2000/2003 IIS服务器,你一定会想,怎样才能长期占有这个“肉鸡”呢?聪明的你肯定 ...

  6. vue-cli配置文件详解

    转自: https://blog.csdn.net/Mr_YanYan/article/details/79233188

  7. base64编码-----------》struts2(token)利用BigInteger产生随机数

    //struts2 源码 public static final Random RANDOM= new Random(); public static String generateGUID(){ r ...

  8. VueJS渐进式JS框架中文学习

    官方网站:http://vuejs.org/ GitHub:https://github.com/vuejs/vue 中文学习地址:https://cn.vuejs.org/

  9. bit-map再显身手:test.txt中有42亿个无符号整数, 求不存在于test.txt中的最小无符号整数。限制: 可用内存为600MB.

    先看看这个题目:test.txt中有42亿个无符号整数, 求不存在于test.txt中的最小无符号整数. 限制: 可用内存为600MB. 又是大数据. 看到42亿, 有灵感没? 要知道, 2的32次方 ...

  10. phpdoctor 安装,配置,生成文档

    window 下安装phpdoctor 1 安装php,设置环境变量path ,把php 的安装路径加上,比如php 安装在d:/php5/ 2下载phpdoctor,可以去官网下载 http://p ...