DOM Document节点类型详解
在前面 DOM 概况 中,我们知道了 DOM 总共有 12 个节点类型,今天我们就来讲下 DOM 中最重要的节点类型之一的 document 节点类型。
1、概况
Javascript 通过 Document 类型表示文档。在浏览器中, document 对象是 HTMLDocument(继承自 Document 类型)的一个实例,表示整个 HTML 页面。而且, document 对象是 window 对象的一个属性,因此可以将其作为全局对象来访问。 Document 节点具有如下特性:
nodeType
的值为 9nodeName
的值为 '#document'nodeValue
的值为 nullparentNode
的值为 nullownerDocument
的值为 null- 其子节点可能是一个
DocumentType
(最多一个)、Element
(最多一个)、ProcessingInstruction
或者Comment
Document 类型可以表示 HTML 页面或者其他基于 XML 的文档。不过最常见的应用还是作为 HTMLDocument 实例的 document 对象。通过这个文档对象,不仅可以取得与页面有关的信息,而且还能操作页面的外观及其底层结构。
var d = document;
console.log(d.nodeType); // 9
console.log(d.nodeName); // #document
console.log(d.nodeValue); // null
console.log(d.parentNode); // null
console.log(d.ownerDocument); // null
2、文档的子节点
虽然 DOM 标准规定 Document 节点的子节点可以是 DocumentType(最多一个)、Element(最多一个)、ProcessingInstruction 或者 Comment,但还是有两个内置的访问其子节点的快捷方式。第一个就是 documentElement 属性,该属性始终指向 HTML 页面中的 <html>
元素,另一个就是通过 childNodes 列表访问文档元素:(假设没有指定文档类型)
var html = document.documentElement;
console.log(html === document.childNodes[0]); // true
console.log(html === document.firstChild); // true
作为 HTMLDocument 的实例,document 对象还有一个 body 属性,直接指向 <body>
元素。
var body = document.body;
所有的浏览器都支持 document.documentElement 和 document.body 属性
Document 另一个可能的子节点是 DocumentType。通常将 <!DOCTYPE>
标签看成一个和文档其他部分不同的实体,可以通过 doctype 属性来访问它的信息:
var doctype = document.doctype; // 取得对 <!DOCTYPE> 的引用
console.log(doctype);
console.log(document.firstChild === doctype); // true
console.log(document.childNodes.length); // 2 (doctype 以及 documentElement)
但是浏览器对 document.doctype 的支持差别很大,使得这个属性的用处很有限。
文档的子节点还能是注释节点:
<!-- a -->
<!DOCTYPE html>
<script>
console.log(document.childNodes.length); // 3 (chrome)
</script>
<!-- b -->
但是,现实中的浏览器在处理位于 <html>
外部的注释方面存在差异,比如 chrome 下就直接忽视上面的第二个注释节点。
3、文档信息
作为 HTMLDocument 的一个实例,document 对象还有一些标准的 Document 对象所没有的属性。
// 取得文档标题
var title = document.title;
// 设置文档标题
document.title = 'New Page Title';
// 取得完整的 url
var url = document.url;
// 取得域名
var domain = document.domain;
// 取得来源页面的 url
var referrer = document.referrer;
domain 属性是可以设置的,这点在跨域通信中应用甚广。由于安全方面的考虑,也并非可以给 domain 设置任何值。
// 假设页面来自 p2p.wrox.com
document.domain = 'wrox.com'; // 成功
document.domain = 'cnblogs.com'; // 出错
浏览器对 domain 属性还有一个限制,即如果域名一开始是 “松散的”,那么不能再将它设置为 “紧绷的”:
// 假设页面来自 p2p.wrox.com
document.domain = 'wrox.com';
document.domain = 'p2p.wrox.com'; // 出错
4、查找元素
var a = document.getElementById('..');
var b = document.getElementsByTagName('..');
// HTMLCollection
var images = document.getElementsByTagName('img');
console.log(images.length);
console.log(images[0].src);
console.log(images.item(0).src);
// 通过元素的name特性取得集合中的项
var myImage = images.namedItem('..');
// 也可以
var myImage = images['..']; // .. 为name值
// 对于HTMLCollection而言,我们可以向方括号中传入数字或者字符串(name值)
// 在后台,对数字调用item(),对字符串索引调用namedItem()
var myImage = images[0];
var myImage = images['nameOfMyImage'];
// 取得文档中的所有元素
var allElements = document.getElementsByTagName('*');
// document.getElementsByName
var radios = document.getElementsByName('color');
5、特殊集合
除了属性和方法,document 对象还有一些特殊的集合,这些集合都是 HTMLCollection 对象,为访问文档常用的部分提供了快捷方式:
document.anchors // 包含所有带name特性的<a>元素
document.forms // 包含文档中所有的<form>元素
document.images // 包含文档中所有的<img>元素
document.links // 包含文档中所有带href的<a>元素
DOM Document节点类型详解的更多相关文章
- DOM Element节点类型详解
上文中我们讲解了 DOM 中最重要的节点类型之一的 Document 节点类型,本文我们继续深入,谈谈另一个重要的节点类型 Element . 1.概况 Element 类型用于表现 HTML 或 X ...
- javascript 节点属性详解
javascript 节点属性详解 根据 DOM,html 文档中的每个成分都是一个节点 DOM 是这样规定的:整个文档是一个文档节点每个 html 标签是一个元素节点包含在于 html 元素中的文本 ...
- 深入浅出DOM基础——《DOM探索之基础详解篇》学习笔记
来源于:https://github.com/jawil/blog/issues/9 之前通过深入学习DOM的相关知识,看了慕课网DOM探索之基础详解篇这个视频(在最近看第三遍的时候,准备记录一点东西 ...
- Dom探索之基础详解
认识DOM DOM级别 注::DOM 0级标准实际并不存在,只是历史坐标系的一个参照点而已,具体的说,它指IE4.0和Netscape Navigator4.0最初支持的DHTML. 节点类型 注:1 ...
- js变量类型详解
<html> <title>js变量类型详解</title> <meta http-equiv="content-type" conten ...
- js课程 1-3 Javascript变量类型详解
js课程 1-3 Javascript变量类型详解 一.总结 一句话总结:js对象点(属性方法),json对象冒号(属性方法).属性和方法区别只有一个括号. 1.json对象中的函数的使用? 函数名 ...
- C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解
前言:已经有一个月没写点什么了,感觉心里空落落的.今天再来篇干货,想要学习Webapi的园友们速速动起来,跟着博主一起来学习吧.之前分享过一篇 C#进阶系列——WebApi接口传参不再困惑:传参详解 ...
- C++11 并发指南六(atomic 类型详解四 C 风格原子操作介绍)
前面三篇文章<C++11 并发指南六(atomic 类型详解一 atomic_flag 介绍)>.<C++11 并发指南六( <atomic> 类型详解二 std::at ...
- C++11 并发指南六(atomic 类型详解三 std::atomic (续))
C++11 并发指南六( <atomic> 类型详解二 std::atomic ) 介绍了基本的原子类型 std::atomic 的用法,本节我会给大家介绍C++11 标准库中的 std: ...
随机推荐
- 编写Java应用程序,定义Animal类,此类中有动物的属性:名称 name,腿的数量legs,统计动物的数量 count;方法:设置动物腿数量的方法 void setLegs(),获得腿数量的方法 getLegs(),设置动物名称的方法 setKind(),获得动物名称的方法 getKind(),获得动物数量的方法 getCount()。定义Fish类,是Animal类的子类,统计鱼的数量 co
package com.hanqi.test; public class Animal { private String name; private int legs; private int cou ...
- C#邮件发送问题(二)
C#邮件发送问题(一) 三.C#下创建基于TcpClient发送邮件组件 在上一节在Dos命令行下测试SMTP服务器连接时,已经使用了SMTP的部分命令,但是当时无法对信息进行编码和解码,也就无法继续 ...
- nodeJS Express 删除 x-powered-by
在使用Express4 Header头部会输出,在晚上搜索几种方案也没有产生效果,就看了一下官方文档 Property Type Value Default x-p ...
- hw 要的是螺丝钉
日前突然接到华为HR的电话,叫我去面试。本来我的工作和工资收入等各方面在本地也还算可以,没有想要跳槽。但是本着去看看有没有更好机会的想法就去了。 9:30到了现场后,在那里等了很久,一个考官上来问了 ...
- Windows Azure CN 超业余性能测试
先来说说为什么会有这篇文章吧.从朋友那里搞来个Windows Azure CN的测试帐号,在公司的时候领导的朋友有一个阿里云的服务器,平时部署小东西都往上面丢,不过那是人家的东西,还有其他的应用跑在上 ...
- 盘点国内程序员不常用的热门iOS第三方库:看完,还敢自称”精通iOS开发”吗?【转载】
综合github上各个项目的关注度与具体使用情况,涵盖功能,UI,数据库,自动化测试,编程工具等类型,看完,还敢自称”精通iOS开发”吗? https://github.com/syedhali/EZ ...
- android开发环境搭建日记和嵌入式Android开发环境初探
非常感谢博客园的各位,按照你们的博文,还有利用百度和谷歌逐渐建立了android的开发环境,只是给自己备份参考查看,看过的人可以忽略这篇文章. 本文章大部分参考了:http://www.cnblogs ...
- 支付宝APP支付开发- IOException : DER input, Integer tag error
支付宝APP支付Java开发报错: 1 java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: I ...
- [转]CISP(注册信息安全专业人员)认证(12天)
本文转自:http://www.topsec.com.cn/shpx/rzpx/pxkc/cisp/index.htm CISP(注册信息安全专业人员)认证(11天) 中国信息安全产品测评认证中心(C ...
- [No000062]读书八字诀:怎样将书读得通透?
从吃透到通透 有种说法,吃透一本书,才算好好读过.然而比吃透境界更高,是通透.吃透仅限于书中内容,通透则是将书中内容与正反上下.古今中外背景知识相互关联. 当你做到读书通透,收获将远远大于手头那一本书 ...