首页 web前端 js教程 JavaScript文档对象模型-Document类型

JavaScript文档对象模型-Document类型

Jan 20, 2017 pm 02:27 PM

JavaScript通过Document类型来表示文档。在浏览器中,document对象是HTMLDocument的一个实例,表示整个HTML页面。而且Document对象是window对象的一个实例,因此可以将它作为全局对象来访问。Document类型节点具有下面的一些特征:

  • nodeType的值为9。

  • nodeName的值为“#document”。

  • nodeValue的值为null。

  • parentNode的值为null。

它的子节点可能是一个DocumentType(最多一个)、Element(最多一个)、ProcessingInstruction或Comment。

Document类型可以表示HTML页面或其它基于XML的文档。最常见的应用是作为HTMLDocument实例的document对象。通过这个文档对象,不仅可以取得与页面相关的信息,而且还能操作页面的外观和它底层的结构。

 文档的子节点

虽然DOM标准规定Document节点的子节点可以是DocumentType、、Element、ProcessingInstruction或Comment,但还有两个内置的访问它的子节点的快捷方式。第一个是documentElement属性,该属性始终指向HTML页面的元素。另一个是通过childNodes列表访问文档元素,但是通过documentElement属性能够更加快捷的访问该元素。下面是一个例子:

<html>
    <body>
         
    </body>
</html>
登录后复制

上面的页面经过浏览器解析之后,其文档中只包含一个子节点,及元素。通过documentElement属性和childNodes列表来访问这个元素的代码如下:

//取得<html>元素的引用
var html = document.documentElement;
alert(html === document.childNodes[0]);     //true
alert(html === document.firstChild);        //true
登录后复制

上面的例子说明,documentElement、firstChild和childNodes[0]的值相同,都指向元素。

作为HTMLDocument的实例,document对象还有一个body属性,直接指向属性。document.body是我们在开发中经常使用的属性:

var body = document.body;
登录后复制

所有的浏览器都支持document.documentElement属性和document.body属性。

Document另外一个可能的子节点是DocumentType,通常将标签看成一个与文档其它部分不同的实体,可以通过doctype属性来访问它。

var doctype = document.doctype;     //获取<!DOCTYPE>的引用
登录后复制

document对象的属性和方法

document对象是window对象的一个属性。当窗口划分为几个框架的时候,每一个框架都是window对象的一个属性,框架本身实际上也是window对象的一个实例。document对象的常用属性如下表所示:

506.png

上面列出的是一些常用的document属性,要查看当前浏览器支持的所有document属性,可以使用下面的方法:

var attrs = new Array();
for(var property in window.document) {
    attrs.push(property);
    attrs.sort();
}
document.write("<table>");
for(var i=0;i<attrs.length;i++){
    if(i == 0){
        document.write("<tr>");
    }
    if(i > 0 && i%5 == 0){
        document.write("</tr><tr>");
    }
    document.write("<td>" + attrs[i] + "</td>");
}
document.write("</table>");
登录后复制

上面的代码会将当前浏览器支持的document属性按字母排序后移表格的方式打印在页面中。

在上面的document对象的属性中,URL、domain和referrer属性于网页的请求有关。URL属性包含完整的URL地址,及线索在地址栏中的页面地址。domain属性只包含页面的域名,而referrer属性中则保存着链接到当前页面的那一个页面的URL地址。在没有来源页面的情况下,referrer属性可能包含空字符串。所有的这些信息都在HTTP请求头中,只不过我们可以使用JavaScript来访问它们。

//取得完整的URL地址
var URL = document.URL;
//取得域名
var domain = document.domain;
//取得来源页面的URL
var referrer = document.referrer;
登录后复制

查找元素

在DOM的应用当中,最常见的操作时取得某个或某组元素的引用,然后再执行一些操作。取得元素的操作可以通过document对象的以下一些方法来完成。

  • document.getElementById()

  • document.getElementsByTagName

  • document.getElementsByName()

第一个方法document.getElementById()接收一个参数:要获取的元素的ID。如果找到该元素则返回该元素,否则返回null。如果页面中存在多个具有相同ID的元素,那么getElementById()方法只返回文档中第一次的元素。在IE7及以下版本的IE浏览器中,如果表单元素的name属性与要查找的元素ID相同,该表单元素也会被返回,例如:

<input type="text" name="someId" value="text value">
<div id="someId">div</div>
登录后复制

当使用document.getElementById("someId")来查找元素的时候,IE7浏览器会将元素返回。而其它浏览器则是返回div元素。

另一个经常使用的方法是document.getElementsByTagName,通过标签名来查找元素。该方法接收一个参数:要查找的标签名称。它会返回0个或多个元素的NodeList。在HTML文档中,该方法返回一个HTMLCollection对象,称为“动态”集合。例如,下面的代码获取页面中所有的元素,并返回一个HTMLCollection:

var images = document.getElementByTagName("img");
登录后复制

与NodeList相似,可以使用方括号语法或item()方法来访问HTMLCollection对象:

alert(images.length);           //图片的数量
alert(images[0].src);           //第一张图片的src属性
alert(images.item(0).src);      //第一张图片的src属性
登录后复制

HTMLCollection对象还有一个方法:namedItem(),使用这个方法可以通过元素的name属性取得集合中的项。例如上面的图片集合中,如果有一张图片的name属性为mypic:

<img src="demoimg.jpg" name="mypic">
登录后复制

那么就可以通过下面的方法从images变量中获取这张图片:

var mypic = images.namedItem("mypic");
登录后复制

如果想要获取页面中的所有元素,可以通过在getElementByTagName()方法中传入“*”通配符来获取。

var allElements = document.getElementByTagName("*");
登录后复制

第3个获取元素的方法是HTMLDocument特有的方法:getElementByName()。该方法会返回指定name属性的所有元素。例如下面的代码:

<ul>
    <li><input type="text" name="author" value="author1"></li>
    <li><input type="text" name="author" value="author2"></li>
    <li><input type="text" name="author" value="author3"></li>
</ul>
登录后复制
var authors = document.getElementByName("author");
登录后复制

上面的代码会返回所有的li元素。同样,getElementByName()方法也会返回一个HTMLCollection对象。

HTML5中的querySelector和querySelectorAll方法

除了上面的三个查找元素的方法之外,在HTML5向Web API新引入了新的document.querySelector和document.querySelectorAll方法用来更方便地从DOM选取元素,功能类似于jQuery的选择器。

这两个方法使用差不多的语法,都是接收一个字符串参数,这个参数需要是合法的CSS选择语法。

element = document.querySelector(&#39;selectors&#39;);
elementList = document.querySelectorAll(&#39;selectors&#39;);
登录后复制

其中参数selectors 可以包含多个CSS选择器,用逗号隔开。

element = document.querySelector(&#39;selector1,selector2,...&#39;);
elementList = document.querySelectorAll(&#39;selector1,selector2,...&#39;);
登录后复制

使用这两个方法无法查找带伪类状态的元素,比如querySelector(':hover')不会得到预期结果。

querySelector方法返回满足条件的单个元素。按照深度优先和先序遍历的原则使用参数提供的CSS选择器在DOM进行查找,返回第一个满足条件的元素。

element = document.querySelector(&#39;div#container&#39;);//返回id为container的首个div
element = document.querySelector(&#39;.foo,.bar&#39;);//返回带有foo或者bar样式类的首个元素
登录后复制

querySelectorAll方法返回所有满足条件的元素,结果是个nodeList集合。查找规则与前面所述一样。

elements = document.querySelectorAll(&#39;div.foo&#39;);//返回所有带foo类样式的div
登录后复制

但需要注意的是返回的nodeList集合中的元素是非实时(no-live)的,想要区别什么是实时非实时的返回结果,请看下面的例子:

<div id="container">
    <div></div>
    <div></div>
</div>
登录后复制
//首先选取页面中id为container的元素
container=document.getElementById(&#39;#container&#39;);
console.log(container.childNodes.length)//结果为2
//然后通过代码为其添加一个子元素
container.appendChild(document.createElement(&#39;div&#39;));
//这个元素不但添加到页面了,这里的变量container也自动更新了
console.log(container.childNodes.length)//结果为3
登录后复制

通过上面的例子就很好地理解了什么是会实时更新的元素。document.getElementById返回的便是实时结果,上面对其添加一个子元素后,再次获取所有子元素个数,已经由原来的2个更新为3个(这里不考虑有些浏览器比如Chrome会把空白也解析为一个子节点)。

文档的写入

document对象可以将输出流写入到网页中,它有4个方法:write()、writeln()、open()和close()。其中,write()和writeln()方法接收一个字符串参数,即要写入到输出流的文本。write()方法会原样写出,而writeln()方法会在字符串的末尾添加一个换行符(\n)。在页面加载的过程中,可以使用这两个方法来动态的添加内容,例如下面的代码:

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <p>当前的时间为:
    <script type="text/javascript">
    document.write("<strong>"+(new Date()).toString()+"</strong>");
    </script>
    </p>
</body>
</html>
登录后复制

以上就是JavaScript文档对象模型-Document类型的内容,更多相关内容请关注PHP中文网(www.php.cn)!


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何使用WebSocket和JavaScript实现在线语音识别系统 如何使用WebSocket和JavaScript实现在线语音识别系统 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript实现在线语音识别系统引言:随着科技的不断发展,语音识别技术已经成为了人工智能领域的重要组成部分。而基于WebSocket和JavaScript实现的在线语音识别系统,具备了低延迟、实时性和跨平台的特点,成为了一种被广泛应用的解决方案。本文将介绍如何使用WebSocket和JavaScript来实现在线语音识别系

WebSocket与JavaScript:实现实时监控系统的关键技术 WebSocket与JavaScript:实现实时监控系统的关键技术 Dec 17, 2023 pm 05:30 PM

WebSocket与JavaScript:实现实时监控系统的关键技术引言:随着互联网技术的快速发展,实时监控系统在各个领域中得到了广泛的应用。而实现实时监控的关键技术之一就是WebSocket与JavaScript的结合使用。本文将介绍WebSocket与JavaScript在实时监控系统中的应用,并给出代码示例,详细解释其实现原理。一、WebSocket技

如何使用WebSocket和JavaScript实现在线预约系统 如何使用WebSocket和JavaScript实现在线预约系统 Dec 17, 2023 am 09:39 AM

如何使用WebSocket和JavaScript实现在线预约系统在当今数字化的时代,越来越多的业务和服务都需要提供在线预约功能。而实现一个高效、实时的在线预约系统是至关重要的。本文将介绍如何使用WebSocket和JavaScript来实现一个在线预约系统,并提供具体的代码示例。一、什么是WebSocketWebSocket是一种在单个TCP连接上进行全双工

如何利用JavaScript和WebSocket实现实时在线点餐系统 如何利用JavaScript和WebSocket实现实时在线点餐系统 Dec 17, 2023 pm 12:09 PM

如何利用JavaScript和WebSocket实现实时在线点餐系统介绍:随着互联网的普及和技术的进步,越来越多的餐厅开始提供在线点餐服务。为了实现实时在线点餐系统,我们可以利用JavaScript和WebSocket技术。WebSocket是一种基于TCP协议的全双工通信协议,可以实现客户端与服务器的实时双向通信。在实时在线点餐系统中,当用户选择菜品并下单

JavaScript和WebSocket:打造高效的实时天气预报系统 JavaScript和WebSocket:打造高效的实时天气预报系统 Dec 17, 2023 pm 05:13 PM

JavaScript和WebSocket:打造高效的实时天气预报系统引言:如今,天气预报的准确性对于日常生活以及决策制定具有重要意义。随着技术的发展,我们可以通过实时获取天气数据来提供更准确可靠的天气预报。在本文中,我们将学习如何使用JavaScript和WebSocket技术,来构建一个高效的实时天气预报系统。本文将通过具体的代码示例来展示实现的过程。We

简易JavaScript教程:获取HTTP状态码的方法 简易JavaScript教程:获取HTTP状态码的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教程:如何获取HTTP状态码,需要具体代码示例前言:在Web开发中,经常会涉及到与服务器进行数据交互的场景。在与服务器进行通信时,我们经常需要获取返回的HTTP状态码来判断操作是否成功,根据不同的状态码来进行相应的处理。本篇文章将教你如何使用JavaScript获取HTTP状态码,并提供一些实用的代码示例。使用XMLHttpRequest

javascript中如何使用insertBefore javascript中如何使用insertBefore Nov 24, 2023 am 11:56 AM

用法:在JavaScript中,insertBefore()方法用于在DOM树中插入一个新的节点。这个方法需要两个参数:要插入的新节点和参考节点(即新节点将要被插入的位置的节点)。

如何在JavaScript中获取HTTP状态码的简单方法 如何在JavaScript中获取HTTP状态码的简单方法 Jan 05, 2024 pm 01:37 PM

JavaScript中的HTTP状态码获取方法简介:在进行前端开发中,我们常常需要处理与后端接口的交互,而HTTP状态码就是其中非常重要的一部分。了解和获取HTTP状态码有助于我们更好地处理接口返回的数据。本文将介绍使用JavaScript获取HTTP状态码的方法,并提供具体代码示例。一、什么是HTTP状态码HTTP状态码是指当浏览器向服务器发起请求时,服务

See all articles