DOM简介


DOM是W3C(World Wide Web Consortium)标准。

“W3C 文档对象模型(DOM,全称Document Object Model)”是一个使程序和脚本有能力动态地访问和更新文档的内容、结构以及样式的平台和语言中立的接口。

DOM被分为3个不同的部分/级别:

  • 核心 DOM
  • XML DOM
  • HTML DOM

核心DOM:提供了操作文档的公有属性和方法,就相当于鼻祖。它可以可操作一切结构化文档的API,包括HTML和XML。是万能的!但是很繁琐!

HTML DOM:它是专门操作HTML文档的简化版DOMAPI仅对常用的复杂的API进行了简化,对核心DOM进行了在HTML方面的拓展。不是万能的!但是简单

XML DOM:提供了所有XML元素的对象和属性,以及访问方法,与HTML DOM类似。

HTML DOM


节点概念

HTML DOM 把所有的元素全部转化为节点对象,以后要想操作HTML里的内容就等于操作节点。

节点分类

  • 文档节点[object HTMLDocument]
  • 元素节点[object HTMLXXXElement]
  • 属性节点[object Attr]
  • 内容节点[object Text]

1、文档节点就是根,只存在一个,想要得到它十分容易,写一个 document 相当于文档节点了。

<script>
document.write(document);
</script>
渲染结果

2、元素节点:文档节点是根,所以他肯定有许多小弟了,比如 div 、p等等,都是元素节点,属于文档节点的下级。

3、属性和内容节点:id就是div的一个属性节点的节点名,“HTML DOM”就是div内容节点的节点值,节点名和节点值就是节点的属性之一。

<div id="div1">HTML DOM</div>

DOM查找


获取元素节点

我们对DOM操作,最重要的是想修改它的内容,而想要修改DOM元素,我们必须先找到他

  • document.getElementById       通过id获取元素节点 
  • getElementsByTagName       通过标签名称获取元素节点
  • getElementsByClassName         通过类名获取元素节点
  • getElementsByName                  通过表单元素的name获取元素节点
  • querySelector("[selector]")     支持一切css中的选择器,但如果匹配多个,只会返回第一个
  • querySelectorAll("[selector]")    返回所有选中的元素

因为id是唯一的,所以上面除了通过id获取元素节点外,其他获取到的都是节点数组。

例如:

<!--id获取到是单个元素-->
<div id="div1" >
HTML DOM
</div> <script>
var div1 = document.getElementById("div1");
//或者
div1 = document.querySelector("#div1");
document.write(div1);
</script>
渲染结果

<!--其他获取到的是元素数组-->
<div id="div1" >
HTML DOM
</div> <script>
var divs = document.getElementsByTagName("div");
var div1 = divs[0];
</script>
渲染结果

遍历元素数组,根据javascript的知识,数组有个属性length,因此我们可以使用for循环遍历他

<div class="div">
HTML DOM
</div>
<div class="div">
DIV2
</div> <script> console.log("--getElementsByTagName--");
var element = document.getElementsByTagName("div");
for(var i = 0; i < element.length; i++){
console.log(element[i].innerText);
}  console.log("--querySelectorAll--");
element = document.querySelectorAll("div");
for(var i = 0; i < element.length; i++){
console.log(element[i].innerText);
} console.log("--querySelectorAll select class--");
element = document.querySelectorAll(".div");
for(var i = 0; i < element.length; i++){
console.log(element[i].innerText);
}  
</script>

获取属性节点

首先需要获取到元素节点,然后可以通过attributes获取元素节点的属性节点,属性可以有多个,所以获取到是属性节点数组。

若要获取某一指定的属性的节点例如id,可以通过键名xx["id"]获取到属性节点。

<div id="d1" align="center" class="abc">hello HTML DOM</div>
<script>
var div1 = document.getElementById("d1");
var as = div1.attributes;
document.write("div总共有"+as.length +" 个属性");
document.write("分别是:");
for(i = 0; i< as.length; i++){
document.write("<br>");
document.write(as[i].nodeName);
document.write(":");
document.write(as[i].nodeValue);
}
document.write("<br>");
document.write("div的id属性值是:"+ as["id"].nodeValue);
</script>

渲染结果

获取内容节点

通过childNodes获取到的第一个子节点就是内容节点

<div id="d1" align="center" class="abc">hello HTML DOM</div>
<script>
var div1 = document.getElementById("d1");
var content = div1.childNodes[0];
document.write("div的内容节点名是:"+content.nodeName);
document.write("<br>");
document.write("div的内容节点值是:"+content.nodeValue);
</script>

渲染结果

节点的属性


  • nodeName    节点名称
  • nodeValue     节点值
  • nodeType      节点类型
  • innerHTML    元素节点的文本信息
  • 元素节点的属性,可直接访问
    • id  
    • value  
    • className  
<div id="div1" class="d">
愿用一生守护你
</div>
<hr>
<script>
function w(s){
document.write(s);
} //元素节点
var div1 = document.getElementById("div1");
//属性节点数组
var attrs = div1.attributes;
//遍历属性节点
for(var i = 0; i < attrs.length; i++){
//节点名
w(attrs[i].nodeName);
w(" : ");
//节点值
w(attrs[i].nodeValue);
w("<br>");
} //获取内容节点的节点值
var value = div1.childNodes[0].nodeValue;
w(value);
w("<br>");
//获取内容节点太复杂了,简化一点
var singleValue = div1.innerHTML;
w(singleValue);
w("<br>"); //直接访问内置的属性
w(div1.id);
w("<br>");
w(div1.className);
</script>

渲染结果

<div class="div">    HTML DOM</div><div class="div">DIV2</div>
<script>
    console.log("--getElementsByTagName--");    var element = document.getElementsByTagName("div");    for(var i = 0; i < element.length; i++){        console.log(element[i].innerText);    } 
    console.log("--querySelectorAll--");    element = document.querySelectorAll("div");    for(var i = 0; i < element.length; i++){        console.log(element[i].innerText);    }

    console.log("--querySelectorAll select class--");    element = document.querySelectorAll(".div");    for(var i = 0; i < element.length; i++){        console.log(element[i].innerText);    }  </script>

div1

DOM分类及HTML DOM的更多相关文章

  1. javascript中0级DOM和2级DOM事件模型浅析 分类: C1_HTML/JS/JQUERY 2014-08-06 15:22 253人阅读 评论(0) 收藏

    Javascript程序使用的是事件驱动的设计模式,为一个元素添加事件监听函数,当这个元素的相应事件被触发那么其添加的事件监听函数就被调用: <input type="button&q ...

  2. dom core,html dom,css dom,jquery 中的dom操作

    前端开发中为达到某种目的,往往有很多方法:dom core,html dom,jquery; dom core/jquery主要通过函数调用的方式(getAttribute("属性名&quo ...

  3. javascript中0级DOM和2级DOM事件模型浅析

    Javascript程序使用的是事件驱动的设计模式,为一个元素添加事件监听函数,当这个元素的相应事件被触发那么其添加的事件监听函数就被调用: <input type="button&q ...

  4. proxy 利用get拦截,实现一个生成各种DOM节点的通用函数dom。

    const dom = new Proxy({}, { get(target, property) { return function(attrs = {}, ...children) { const ...

  5. js学习总结:DOM节点二(dom基本操作)

    一.DOM继承树 DOM——Document Object Model DOM定义了表示修改文档所需要的方法.DOM对象即为宿主对象,由浏览器厂商定义,用来操作html和xml的一类厂商定义,也有人称 ...

  6. python 全栈开发,Day51(常用内置对象,函数,伪数组 arguments,关于DOM的事件操作,DOM介绍)

    昨日内容回顾 1.三种引入方式 1.行内js <div onclick = 'add(3,4)'></div> //声明一个函数 function add(a,b){ } 2. ...

  7. 全面理解虚拟DOM,实现虚拟DOM

    1.为什么需要虚拟DOM DOM是很慢的,其元素非常庞大,页面的性能问题鲜有由JS引起的,大部分都是由DOM操作引起的.如果对前端工作进行抽象的话,主要就是维护状态和更新视图:而更新视图和维护状态都需 ...

  8. 通俗易懂的来讲讲DOM——科普性质的DOM入门教程

    DOM这个东西很重要,不过初学的时候很容易蒙,什么Document.Element.Node用官方语言来解释根本就不是人话,只能在实践中硬着头皮一点一点尝试.今天要推荐的是一篇关于DOM的博客.说是教 ...

  9. 第一百六十七节,jQuery,DOM 节点操作,DOM 节点模型操作

    jQuery,DOM 节点操作,DOM 节点模型操作 学习要点: 1.创建节点 2.插入节点 3.包裹节点 4.节点操作 DOM 中有一个非常重要的功能,就是节点模型,也就是 DOM 中的“M”.页面 ...

随机推荐

  1. .NET 云原生架构师训练营(模块二 基础巩固 消息队列 介绍与基础)--学习笔记

    2.6.1 消息队列 -- 介绍 主要使用场景 队列的三种形式 消息队列的优点 主要使用场景 典型的异步处理 流量削锋 应用解耦 队列的三种形式 点对点 工作队列 发布与订阅 消息队列的优点 1.屏蔽 ...

  2. Asp.Net Core 应用配置

    五种读取方式 五种读取方式依赖于 IConfiguration 和 IConfigurationRoot 对象 一.初级写法 //不区分大小写 string connectionString = _c ...

  3. 一键配置网卡IP(win10)脚本

    前两天有个小伙伴问我,如何快速配置IP,在公司在家里在宿舍,快速配置IP,然后我特别为这个小伙伴写了一个脚本. @echo off mode con: cols=60 lines=25 title 网 ...

  4. LeetCode542 01矩阵

    给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. 两个相邻元素间的距离为 1 . 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 0 1 0 0 0 ...

  5. load data local带来的安全问题

    load data默认读的是服务器上的文件,但是加上local参数后,就可以将本地具有访问权限的文件加载到数据库中,这在带来方便的同时,也带来了以下安全问题, 可以任意加载本地文件到数据库, 在web ...

  6. 【Linux】rsync错误解析

    rsync: Failed to exec ssh: No such file or directory (2) rsync error: error in IPC code (code 14) at ...

  7. ORA-00245 control file backup operation failed 分析和解决

    一.问题说明 操作系统: RedHat 5.8 数据库: 11.2.0.3 2节点RAC. 使用RMAN 备份的时候,报如下错误: ORA-00245: control file backup fai ...

  8. 【Oracle LISTNER】oracle Listener 宕机解决办法

    今天想起了很久没用的oracle库,用plsql尝试连接,发现报超时错误,以为是偶然,多次尝试连接,发现还是超时,于是登录到系统中,查看数据库情况,发现正常查询和修改添加,感觉不是数据库问题,查看监听 ...

  9. 实现简易版德州扑克|学习麻瓜编程以项目为导向入门前端 HTML+CSS+JS

    实现简易版德州扑克 1.先上达到网页效果图(简易版德州扑克) 网页分为发牌区和牌池,上面为发牌区,下面是牌池区 2. 代码实现 2.1 HTML和JS代码 ` <link rel="s ...

  10. VMware中安装Ubuntu后,安装VMwareTools提示“Not enough free space to extract VMwareTools-10.3.10-13959562.tar.gz”的解决办法

    将加载后的Vmware Tools中的*.tar.gz文件复制到桌面后提取,否则会报错: