Documet类型

了解了基础的Node类型过后,我们来聊聊Node中的Document类型

我们知道所有的节点都继承自Node类型

所以除了Node类型公有的方法和类型之外,Document类型还有一些自己的特性

JS通过Document类型来表示文档

在浏览器中 document 对象是 HTMLDocument 的一个实例(继承自Document类型)

表示整个 HTML 页面,且 document 对象是 window 对象的一个属性所以可以作为全局对象访问

具有以下特征:

1、nodeName:#document

2、nodeValue:null

3、parentNode:null

4、nodeType:9

5、ownerDocument:null

文档的子节点

DOM标准规定 Document 节点的子节点可以是

1、DocumentType(文档类型声明)

2、Element

3、ProcessingInstruction

4、Comment

通过documentElement属性可以更快地访问 document 的子节点

该属性始终指向页面中的<html>

也可以通过 childNodes 来访问页面中的<html>

但是有些时候在 html 之前可能会有注释节点

所以如果需要访问 <html> 最好还是使用 document.documentElement 来访问

JS中document 还有个 body 属性用于访问 <body> 节点

doctype 属性用于访问 <!DOCTYPE html> 也就是文档类型声明,但是不同浏览器在该属性上的差异较大,所以不推荐使用

具体差异在:

1、IE8以下始终为null,会将其解析为注释节点

2、IE8以上若存在,会将其作为document 的第一个子节点

3、在非IE浏览器中,该属性会正确指向文档声明,但是不会出现在 childNodes 中

关于注释节点,不同浏览器的解析也存在着较大的差异

所以 <html> 外部的注释节点作用极为有限

文档信息

document 作为 HTMLDocument 的实例,document 对象还有一些标准的 Document 对象所没有的属性

1、title 指向页面中的 <title> 内容,通过修改该值可以修改页面的标题

2、URL  包含页面完整的 URL地址(即显示在地址栏中的内容)

3、domain  页面的域名

4、referrer  来源url 通常为空,只有重定向的页面有该值

后面三个属性中只有 domain 可以设置值,但是只能设置为 URL 中包含的域名,也就是子域名

并且还有一个限制,一旦将其设置为子域名就不能再设回父域名,也就是只能设置为当前domain的子域名

查找元素

Dom操作中最基础,也是最重要的功能就是查找元素了

该操作可以通过 document 对象的几个方法来完成

Document提供的方法:

1、getElementById() // 传入元素ID,返回第一次匹配的元素,IE8以下不区分ID的大小写,IE7以下有个bug 若在 ID元素的前面,有个表单元素的name与ID一致则会返回这个表单元素

2、getElementsByTagName() // 传入标签名,返回一个包含(0或多个元素的)NodeList,在HTML文档中会返回一个 HTMLCollection 对象,可以传入 * 以获取全部元素,html不区分大小写,XML区分

PS、HTMLCollection 和 NodeList 类似,也是一个“动态” 的集合,该集合提供两个方法用以访问其中的元素

  1、item()传入元素索引

  2、namedItem() 通过元素的name特性进行索引

并且如果对 HTMLCollection 使用方括号的方式进行访问,在后台仍旧调用的是 item 方法

还有一点需要注意,IE在实现上将注释节点实现为元素,所以在使用* 获取所有元素时也会获取到注释节点

HTMLDocument提供的方法:

getElementsByName () 查找具有特定name的元素

与getElementByTagName 类似该方法返回一个 HTMLCollection

不过对于结果调用 namedItem 只会返回第一个,因为所有结果的name都是一样的

特殊集合

document 对象还有一些特殊集合,为访问文档的常用部分提供了便利

这些集合都是 HTMLCollection

document.anchors  所有有name的a标签的集合

document.forms  文档中的所有 <form>

document.images  文档中所有的<img>

document.links 文档中所有有href属性的a标签

DOM一致性检测

由于DOM分为多个级别,所以检测浏览器具体实现了哪些就是一个十分必要的过程

document.implementation属性为此提供了相应的功能和对象

DOM1中只为其提供了一个方法 hasFeature

该方法需要两个参数,第一个是需要检测的功能,第二个参数是该功能的版本号,两个参数都为字符串串形式

可以检测的功能有以下值:

1.Core // 基本DOM

2.XML // Core的XML拓展

3.HTML  // XML对HTML的拓展

4.Views // 样式的文档格式化

5.StyleSheets // 将样式表关联到文档

6.CSS // 对层叠样式表1级的支持

7.CSS2 // 对层叠样式表2级支持

8.Events // 常规DOM事件

9.UEvents // 用户界面事件

10.MouseEvents // 鼠标事件

11.MutationEvents // DOM树变化时的事件

12.HTMLEvents // HTML4.01的事件

13.Range // 对范围操作的支持

14.Traversal // 遍历DOM树的方法

15.LS // 文件与DOM树的同步加载与保存

16.LS-Async // 文件与DOM树之间的异步加载与保存

17.Validation // 确保有效的前提下修改DOM树的方法

PS.由于这里的属性值,由浏览器厂商设置,所以很可能不准确,所以需要能力检测与之配合使用

文档写入

document 对象还有一个十分重要的功能,那就是将输出流写入到网页中的能力

提供了4个方法:

1、write  接收一个字符串,将其原样写入到网页中

2、writeln  接收一个字符串,将字符串末尾添加 \n 换行后写入页面

3、open 打开网页输出流

4、close  关闭网页输出流

如果页面加载完成,那么输出的内容将会重写整个页面

Javascript高级编程学习笔记(36)—— DOM(2)Document的更多相关文章

  1. Javascript高级编程学习笔记(49)—— DOM2和DOM3(1)DOM变化

    DOM变化 我们知道DOM有许多的版本,其中DOM0和DOM2这两个级别以对事件的纳入标准而为人所知 但是呢,这里不讲事件,在后面会有专门和事件有关的部分作为详细讲解 这里就只讲一下DOM2和DOM3 ...

  2. Javascript高级编程学习笔记(37)—— DOM(3)Element

    Element类型 除了Document类型之外,Element类型应该就是web编程中最常用的类型了 Element类型主要用于表现XML.HTML元素,提供对元素标签名.子节点以及特性的访问 特性 ...

  3. Javascript高级编程学习笔记(35)—— DOM(1)节点

    DOM JS由三部分组成 1.BOM 2.DOM 3.ECMAScript ES和BOM在前面的文章已经介绍过了 今天开始JS组成的最后一部分DOM(文档对象模型) 我们知道,JS中的这三个部分实际上 ...

  4. Javascript高级编程学习笔记(71)—— 模拟事件(1)DOM事件模拟

    事件,指的是网页中某个特定的交互时刻 一般来说事件由浏览器厂商负责提供,一般由用户操作或者其它浏览器功能来触发 但是有一类特殊的事件,那就是由我们开发人员通过JS触发的事件 这些事件和浏览器创建的事件 ...

  5. Javascript高级编程学习笔记(45)——DOM 操作表格及DOM动态集合

    操作DOM表格 早些时候,HTML 还是以表格布局为主, 所以DOM操作表格是比较重要的一点 但是现如今 有其它的选择,所以表格的操作也就慢慢地淡出了人们的视线 所以这里也就不过多去详细展开,这里也就 ...

  6. Javascript高级编程学习笔记(42)—— DOM(8)Attr类型

    Attr类型 我们在之前的文章中提到了,元素有一个 attributes 属性 该属性保存了一个 NamedNodeMap 集合 该集合中的元素也就是今天我们所要记叙的 attr 类型 主要就是方便我 ...

  7. Javascript高级编程学习笔记(41)—— DOM(7)DocumentFragment类型

    DocumentFragment类型 除开昨天我们了解的两种不常用的类型之外 今天我们要介绍的两种类型可以说使用频率不输于前面最常用的几种元素类型 首先就是DocumentFragment类型 有些小 ...

  8. Javascript高级编程学习笔记(40)—— DOM(6)CDATASection、DocumentType

    CDATASection类型 CDATASection类型是只针对XML文档的类型 因为浏览器无法解析 在浏览器中创建CDATASection的函数也无法正常使用 该类型有以下属性 nodeType: ...

  9. Javascript高级编程学习笔记(39)—— DOM(5)Comment

    Comment类型 顾名思义,comment类型指的就是注释节点在HTML文档中的类型 也就是说平时我们在代码中的注释,在HTML解析的时候也会被解析为一类节点 让我们可以根据这些节点进行一系列的操作 ...

随机推荐

  1. VBA实现表单自动编号

    效果:每次提交或刷新标段,表单案指定格式实现自动编号.如当天日期加数字编号的格式 即 2019年2月3日产生的第一张表单产生的编号格式为20190203-001 以此类推第二张表单编号为2019020 ...

  2. 用SAX解析xml文件,java

    (此文为(https://www.imooc.com/video/4482)之随笔) 1.用SAX解析xml文件大致分为三步 写了一个XML文件作为例子 (1)main方法代码如下: import j ...

  3. U-Mail企业邮箱如何导入授权文件

    首先,由于U-Mail有Linux版本与Windows版本的区别,并且都非常简单,所以就有了下面的步骤: Windows版本  <点击快速跳转> Linux版本 <点击快速跳转> ...

  4. 较大的互联网公司对Java的要求(转)

    现在各大互联网公司,对Java类的校招要求越来越高,导致很多小伙伴都很迷茫,今天分享一篇谢照东关于Java学习进阶之路,希望能帮助到一些人 佛说五蕴六毒是妄,将因果都念作业障 把看过的书罗列一下 &l ...

  5. java32

    1.抽象类必须有子类才有意义 2.子类中会默认有构造器来调用父类的构造器 3.接口:表示一种规范 interface 接口名(命名规则:在名称前加上I后加上able){ } -2接口也生成对应的字节码 ...

  6. 高速上手C++11 14 笔记1

    1 constexpr constexpr关键字可以让已经具备常量返回的函数运用于常量的位置. c++14起可以在函数内部使用局部变量.循环和分支等简单语句. 2 委托构造&继承构造 委托构造 ...

  7. 1111. Online Map (30)

    Input our current position and a destination, an online map can recommend several paths. Now your jo ...

  8. js html标签select 中option 删除除了第一行外的其他行

    背景:共两个下拉框,第一个下拉框选择完之后,以第一个选定的值为条件返回第二个下拉框中的内容,用js中的createElement()创建,并利用appendChild()来添加进父标签.出现意外:每次 ...

  9. 把excel每一行中的数据输出为一个txt文档的VBA函数

    excel vba代码: Sub makeTxt() For i = 1 To 1088'从第1行到1088行(最后一行) On Error Resume Next'出现错误时继续运行脚本 Open ...

  10. java下载Excel模板(工具类)

    一次文件下载记录 一次不成熟的文件下载操作记录,希望能对需要的人有所帮助. 1.前端代码 $("#downloadModel").click(function(){ var mod ...