DOM自身存在很多类型,比如Element类型:表示的是元素节点,再比如Text类型:表示的是文本节点。DOM也提供了一些扩展功能。

一.DOM类型

DOM基础课程中,我们了解了DOM的节点并且了解怎样查询和操作节点,而本身这些不同的节点,又有着不同的类型。

DOM类型

类型名

说明

Node

表示所有类型值的统一接口,IE不支持

Document

表示文档类型

Element

表示元素节点类型

Text

表示文本节点类型

Comment

表示文档中的注释类型

CDATASection

表示CDATA区域类型

DocumentType

表示文档声明类型

DocumentFragment

表示文档片段类型

Attr

表示属性节点类型

1.Node类型

Node接口是DOM1级就定义了,Node接口定义了12个数值常量以表示每个节点的类型值。除了IE之外,所有浏览器都可以访问这个类型。

Node的常量

常量名

说明

nodeType值

ELEMENT_NODE

元素

1

ATTRIBUTE_NODE

属性

2

TEXT_NODE

文本

3

CDATA_SECTION_NODE

CDATA

4

ENTITY_REFERENCE_NODE

实体参考

5

ENTITY_NODE

实体

6

PROCESSING_INSTRUCETION_NODE

处理指令

7

COMMENT_NODE

注释

8

DOCUMENT_NODE

文档根

9

DOCUMENT_TYPE_NODE

doctype

10

DOCUMENT_FRAGMENT_NODE

文档片段

11

NOTATION_NODE

符号

12

虽然这里介绍了12种节点对象的属性,用的多的其实也就几个而已。

alert(Node.ELEMENT_NODE);//1,元素节点类型值

alert(Node.TEXT_NODE);//2,文本节点类型值

我们建议使用Node类型的属性来代替1,2这些阿拉伯数字,有可能大家会觉得这样岂不是很繁琐吗?并且还有一个问题就是IE不支持Node类型。
如果只有两个属性的话,用1,2来代替会特别方便,但如果属性特别多的情况下,1、2、3、4、5、6、7、8、9、10、11、12,你根本就分不清哪个数字代表的是哪个节点。当然,如果你只用1,2两个节点,那就另当别论了。

IE不支持,我们可以模拟一个类,让IE也支持。

if (typeof Node == 'undefined') {//IE返回

window.Node = {

ELEMENT_NODE : 1,

TEXT_NODE : 3

};

}

2.Document类型

Document类型表示文档,或文档的根节点,而这个节点是隐藏的,没有具体的元素标签。

document;//document

document.nodeType;//9,类型值

document.childNodes[0];//DocumentType,第一个子节点对象

document.childNodes[0].nodeType;//非IE为10,IE为8

document.childNodes[1];//HTMLHtmlElement

document.childNodes[1].nodeName;//HTML

如果想直接得到<html>标签的元素节点对象HTMLHtmlElement,不必使用childNodes属性这么麻烦,可以使用documentElement即可。

document.documentElement;//HTMLHtmlElement

在很多情况下,我们并不需要得到<html>标签的元素节点,而需要得到更常用的<body>标签,之前我们采用的是:document.getElementsByTagName('body')[0],那么这里提供一个更加简便的方法:document.body。

document.body;//HTMLBodyElement

在<html>之前还有一个文档声明:<!DOCTYPE>会作为某些浏览器的第一个节点来处理,这里提供了一个简便方法来处理:document.doctype。

document.doctype;//DocumentType

PS:IE8中,如果使用子节点访问,IE8之前会解释为注释类型Comment节点,而document.doctype则会返回null。

document.childNodes[0].nodeName//IE会是#Comment

在Document中有一些遗留的属性和对象合集,可以快速的帮助我们精确的处理一些任务。

//属性

document.title;//获取和设置<title>标签的值

document.URL;//获取URL路径

document.domain;//获取域名,服务器端

document.referrer;//获取上一个URL,服务器端

//对象集合

document.anchors;//获取文档中带name属性的<a>元素集合

document.links;//获取文档中带href属性的<a>元素集合

document.applets;//获取文档中<applet>元素集合,已不用

document.forms;//获取文档中<form>元素集合

document.images;//获取文档中<img>元素集合

3.Element类型

Element类型用于表现HTML中的元素节点。在DOM基础那章,我们已经可以对元素节点进行查找、创建等操作,元素节点的nodeType为1,nodeName为元素的标签名。

元素节点对象在非IE浏览器可以返回它具体元素节点的对象类型。

元素对应类型表

元素名

类型

HTML

HTMLHtmlElement

DIV

HTMLDivElement

BODY

HTMLBodyElement

P

HTMLParamElement

PS:以上给出了部分对应,更多的元素对应类型,直接访问调用即可。

4.Text类型

Text类型用于表现文本节点类型,文本不包含HTML,或包含转义后的HTML。文本节点的nodeType为3。

在同时创建两个同一级别的文本节点的时候,会产生分离的两个节点。

var box = document.createElement('div');

var text = document.createTextNode('Mr.');

var text2 = document.createTextNode(Lee!);

box.appendChild(text);

box.appendChild(text2);

document.body.appendChild(box);

alert(box.childNodes.length);//2,两个文本节点

PS:把两个同邻的文本节点合并在一起使用normalize()即可。

box.normalize();//合并成一个节点

PS:有合并就有分离,通过splitText(num)即可实现节点分离。

box.firstChild.splitText(3);//分离一个节点

除了上面的两种方法外,Text还提供了一些别的DOM操作的方法如下:

var box = document.getElementById('box');

box.firstChild.deleteData(0,2);//删除从0位置的2个字符

box.firstChild.insertData(0,'Hello.');//从0位置添加指定字符

box.firstChild.replaceData(0,2,'Miss');//从0位置替换掉2个指定字符

box.firstChild.substringData(0,2);//从0位置获取2个字符,直接输出

alert(box.firstChild.nodeValue);//输出结果

5.Comment类型

Comment类型表示文档中的注释。nodeType是8,nodeName是#comment,nodeValue是注释的内容。

var box = document.getElementById('box');

alert(box.firstChild);//Comment

PS:在IE中,注释节点可以使用!当作元素来访问。

var comment = document.getElementsByTagName('!');

alert(comment.length);

6.Attr类型

Attr类型表示文档元素中的属性。nodeType为11,nodeName为属性名,nodeValue为属性值。DOM基础篇已经详细介绍过,略。

二.DOM扩展

1.呈现模式

区分标准模式和混杂模式(怪异模式),主要是看文档的声明。IE为document对象添加了一个名为compatMode属性,这个属性可以识别IE浏览器的文档处于什么模式如果是标准模式,则返回CSS1Compat,如果是混杂模式则返回BackCompat。

if (document.compatMode == 'CSS1Compat') {

alert(document.documentElement.clientWidth);

} else {

alert(document.body.clientWidth);

}

2.滚动

DOM提供了一些滚动页面的方法,如下:

document.getElementById('box').scrollIntoView();//设置指定可见

3.children属性

由于子节点空白问题,IE和其他浏览器解释不一致。虽然可以过滤掉,但如果只是想得到有效子节点,可以使用children属性,这个属性是非标准的。

var box = document.getElementById('box');

alert(box.children.length);//得到有效子节点数目

4.contains()方法

判断一个节点是不是另一个节点的后代,我们可以使用contains()方法。这个方法是IE率先使用的,开发人员无须遍历即可获取此信息。

var box = document.getElementById('box');

alert(box.contains(box.firstChild));//true

在Firefox的DOM3级实现中提供了一个替代的方法compareDocumentPosition()方法。这个方法确定两个节点之间的关系。

var box = document.getElementById('box');

alert(box.compareDocumentPosition(box.firstChild));//20

关系掩码表

掩码

节点关系

1

无关(节点不存在)

2

居前(节点在参考点之前)

4

居后(节点在参考点之后)

8

包含(节点是参考点的祖先)

16

被包含(节点是参考点的后代)

PS:为什么会出现20,那是因为满足了4和16两项,最后相加了。为了能让所有浏览器都可以兼容,我们必须写一个兼容性的函数。

三.DOM操作内容

innerText、innerHTML、outerText和outerHTML等属性。除了之前用过的innerHTML之外,其他三个不怎么用 不说了。

innerHTML属性

document.getElementById('box').innerHTML;//获取文本(不过滤HTML)

document.getElementById('box').innerHTML = '<b>123</b>';//可解析HTML

虽然innerHTML可以插入HTML,但本身还是有一定的限制,也就是所谓的作用域元素,离开这个作用域就无效了。

box.innerHTML = "<script>alert('Lee');</script>";//<script>元素不能被执行

box.innerHTML = "<style>background:red;</style>";//<style>元素不能被执行

JavaScript DOM基础2相关推荐

  1. javascript DOM基础(一)

    本文将DOM和javascript的一些常用法介绍给大家! 1.innerText.innerHTML.outerText.outerHTML区别 功能: innerHTML 设置或获取位于对象起始和 ...

  2. JavaScript零基础入门 13:DOM规范中的MutationObserver接口

    目录 一.MutationObserver接口 二.MutationObserver基本用法 1.observe()方法 2.回调与MutationRecord 3.disconnect()方法 4. ...

  3. 前端学习之JavaScript DOM以及DOM操作的基础知识

    在了解了javascript的语言基础和特性后 javascript真正大放光彩的地方来了--这就是javascript DOM Javascript DOM DOM(Document Object ...

  4. java svg 读取dom结构_SVG基础以及使用Javascript DOM操作SVG

    SVG 不依赖分辨率 支持事件处理器 最适合带有大型渲染区域的应用程序(比如谷歌地图) 复杂度高会减慢渲染速度(任何过度使用 DOM 的应用都不快) 不适合游戏应用 Canvas 依赖分辨率 不支持事 ...

  5. JavaScript的基础学习篇

    在学习JavaScript之前,我们应该先认识一下什么是脚本语言(Scripting Language)? 脚本语言就是一种简单的程序.在运行之前不需要先进行编译,所有的代码都是在客户程序中直接被执行 ...

  6. JavaScript 语言基础知识点总结(思维导图)

    1.JavaScript数组 2.JavaScript 函数基础 3.Javascript 运算符 4.JavaScript 流程控制 5.JavaScript 正则表达式 6.JavaScript ...

  7. JavaScript Dom编程艺术

    当我对JavaScript还停留在只认识这几个字母的时候,有一天我突然心血来潮,在网上下了DOM Scripting的样章,照着里面的例子写了我平生第一个能让我知所以然JavaScript,在浏览器运 ...

  8. Javascript——DOM编程

    Javascript--DOM编程 基本概述 文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.DOM可以以一种独立于平台和语 ...

  9. JavaScript DOM编程艺术学习笔记(一)

    嗯,经过了一周的时间,今天终于将<JavaScript DOM编程艺术(第2版)>这本书看完了,感觉受益匪浅,我和作者及出版社等等都不认识,无意为他们做广告,不过本书确实值得一看,也值得推 ...

  10. 《HTML5+JavaScript动画基础》——2.4 JavaScript对象

    本节书摘来自异步社区<HTML5+JavaScript动画基础>一书中的第2章,第2.4节,作者:[美]Billy Lamberta , Keith Peters著,更多章节内容可以访问云 ...

最新文章

  1. 无法在证书存储区中找到清单签名证书的解决办法
  2. HarmonyOS之LED灯和振动器Vibrator的功能和使用
  3. mysql 怎么创建B Tree索引_MySQL为什么选择B+Tree做索引
  4. 机器人点焊枪接线_用于焊接机器人焊枪工具点及工件坐标系标定装置及方法与流程...
  5. Python中的元类及元类实现的单例模式
  6. 我写的博客居然是百度搜索第一名 - 感谢国家 …
  7. 室外定位_为什么老师应该走出自己的舒适区而进入室外
  8. 开热点给电脑消耗大吗_你试过爬楼梯减肥吗?热量消耗大,选对姿势很重要!...
  9. JSON Funcs
  10. Binary Tree Zigzag Level Order Traversal
  11. sql 获取一个周的周一和周日
  12. spring session 考虑问题解答
  13. tinygrad ->要求python3.8以上
  14. JDK8的下载和安装,以及配置环境变量
  15. GAMES101-现代计算机图形学入门-闫令琪——Lecture 18 Advanced Topics in Rendering 学习笔记
  16. 视频会议中的AEC、AGC、ANS是什么?
  17. Leetcode #1 Two Sum
  18. [扫盲教程]——Mac 新手最容易犯的几项错误
  19. cookie的domain属性
  20. 批量多次复制依次粘贴工具【编程语言:易语言】

热门文章

  1. 免费CMS系统的广告如何去掉
  2. return 1 或 return 0 的作用
  3. 电脑复制手机粘贴,这些Mac的隐藏玩法你知道吗?
  4. mysql命令常用参数实例讲解
  5. python解析properties文件
  6. 《Arduino实战》——2.5 小结
  7. NetscalerSSL证书的导入和link
  8. linux-qcow2格式安装虚拟机及脚本一键克隆qcow2虚拟机
  9. 手工删除oracle的方法
  10. aswing学习笔记2-不规则外框-请教思路