客户端JavaScript的存在把静态HTML转变为交互式的Web应用程序,脚本化Web页面的内容正是JavaScript存在的理由。

 
一个文档对象模型或者说DOM就是一个API,它定义了如何访问组成一个文档的对象。
 
动态文档内容
document.write()
 只能在当前文档下在解析时使用wirte()向其输出HTML代码。(只能在顶层代码中调用,因为这些脚本的执行是解析过程的一部分)
 
如果把一个document.write()调用放入到一个事件句柄函数中,将会覆盖当和它所包含的脚本。所有的HTML中的内容会被覆盖。
 
把Script尽量放在HTML页面尾部,有助于性能提高,会优先下载前面的HTML页面内容,再下载Script运行。
 
也可以使用write()方法结合document对象的open()方法和close()方法,来在其他的窗口或帧中创建一个全新的文档,可以把文档
写入另一个窗口或帖,这在多窗口或多帧的网站中非常有用。
 
 
要创建一个新文档,首先需要调用document对象的open()方法,然后多次调用write()方法在文档中写入内容,最后调用document对象的close()方法以说明创建过程结束了,最后一步非常重要,如果忘记了关闭文档,浏览就不能制止它所显示的文档装载动画。
而且,浏览器可以将写入的HTML缓存起来,这样在调用close()地结束文档之前,缓存输出不会显示出来。
 
与必须的close()调用不同,open()方法的调用是可选的。如果调用一个已经闭关了的文档的write()方法,
JavaScript会隐式地打开一个新的HTML文档,就像已经调用过open()方法一样。这就解释了在同一文档中从事件句柄调用
document.write()时会发生什么,即JavaScript会打开一个新文档,但是在这个过程中,当前文档(以及它的内容,包括脚本、
事件句柄)就被丢弃了,作为一条经验,一个文档绝不应该从事件句柄中调用它自己的write()方法。
 
 
两点注意:
write()可以具有多个参数,用来一起向document中写入内容,相当于字符串拼接
存在writeln()
 <body>
<input type="button" value="打开一个新窗口" id="bt1"/>
</body> window.onload = function () {
var btn = document.getElementById("bt1");
btn.onclick = function () {
//var o = window.open("test.aspx");
var o = window.open();
var doc = o.document;
doc.open();
doc.write("this ");//会覆盖原有页面的内容
doc.write(" is");
doc.write(" a");
doc.write(" test");
doc.close(); }
}
Document属性:以上介绍的三个函数是DOM的遗留方法,以下为遗留属性:
bgColor 
cookie 
domain
lastModified
location
referrer(文档的URL,包含把浏览器带到当前文档的链接)
title  位于 title之间的文本
URL  装载文档的URL
 console.log("document.bgColor:" + document.bgColor + "\ndocument.cookie:" + document.cookie + "\n");
console.log("document.domain:" + document.domain + "\ndocument.lastModified:" + document.lastModified + "\n");
console.log("document.location:" + document.location + "\ndocument.referrer:" + document.referrer + "\n");
console.log("document.URL:" + document.URL);
下面为输出:
document.bgColor:
document.cookie:
document.domain:localhost
document.lastModified:03/25/2015 21:36:48
document.location:http://localhost:1344/default.aspx
document.referrer:
document.URL:http://localhost:1344/default.aspx"
命名的Document对象,
可以直接访问如:
document.form1.name2
 <form name="form1">
<input type="button" name="fbtn" value="打开一个新窗口" id="bt1"/>
</form>
document.form1.name2
window.onload = function () {
document.form1.fbtn.onclick = function () {
//var o = window.open("test.aspx");
var o = window.open()
var doc = o.document;
doc.open();
doc.write("this ");
doc.write(" is");
doc.write(" a");
doc.write(" test");
doc.close();
}
}
Document对象上的事件句柄
事件句柄是由HTML元素onclick和onmouseover等属性定义的。
 
以上介绍的都是0级DOM提供的API
 
以下介绍的为标准化的 W3C DOM
把文档表示为树

HTML DOM 树

通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML。

  • JavaScript 能够改变页面中的所有 HTML 元素
  • JavaScript 能够改变页面中的所有 HTML 属性
  • JavaScript 能够改变页面中的所有 CSS 样式
  • JavaScript 能够对页面中的所有事件做出反应
 

节点父、子和同胞

节点树中的节点彼此拥有层级关系。

父(parent)、子(child)和同胞(sibling)等术语用于描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。

  • 在节点树中,顶端节点被称为根(root)
  • 每个节点都有父节点、除了根(它没有父节点)
  • 一个节点可拥有任意数量的子
  • 同胞是拥有相同父节点的节点
可通过节点的 innerHTML 属性来访问文本节点的值。
 
DOM树结构表现为不同种类的Node对象的一棵树。Node接口定义了遍历和操作树的属性和方法。
注:DOM标准定义了接口,没有定义类。
Node对象的childNodes属性返回节点的孩子的一个列表,并用firstChild、lastChild、nextSibling、perviousSibling和parentNode
属性提供了遍历节点的树的一种方法。像appendChild()、removeChild()、replaceChild()和insertBefore这样的方法能够向一个
文档村中添加节点或者从一个文档树中移除节点。
 
 
节点的类型
文档树中的不同类型的节点都用节点的特定的子接口表示 。每个Node对象都有一个nodeType属性,它指定了节点是什么类型的。
 
将HTML DOM中几个容易常用的属性做下记录:

nodeName、nodeValue 以及 nodeType 包含有关于节点的信息。

nodeName 属性含有某个节点的名称。

  • 元素节点的 nodeName 是标签名称
  • 属性节点的 nodeName 是属性名称
  • 文本节点的 nodeName 永远是 #text
  • 文档节点的 nodeName 永远是 #document

注释: nodeName 所包含的 XML 元素的标签名称永远是大写的

nodeValue

对于文本节点,nodeValue 属性包含文本。

对于属性节点,nodeValue 属性包含属性值。

nodeValue 属性对于文档节点和元素节点是不可用的。

nodeType

nodeType 属性可返回节点的类型。

最重要的节点类型是:

元素类型 nodeTyep的值
接口
元素element 1
Element
属性attr 2
Attr
文本text 3
Text
注释comments 8
Comment
文档document 9
Document
DocumentFragment
11
DocumentFragment
不同的接口定义一些不同的属性和方法。
注:DOM树概况的Node是一个Document对象。这个对象 的documentElement属性引用了一个Element对象,它代表了文档的根
元素。对不起HTML文档,这是<html>标记,它在文档中可以是显式的或者隐式的。在HTML文档中,通常对<body>元素比对<html>
元素更感兴趣,为了方便起见,可以使用document.body来引用这个元素。
 
属性
用Element接口的getArrtribute()方法,setArrtribute()方法和removeAttribute()方法可以
查询、设置、并删除一个元素的属性。
 
DOM HTML API
 
有两个标准版本 1级DOM 2级DOM   以及遗留的DOM 和 3级DOM 开发中
 
DOM一致性
 
在不同的WEB浏览器中,DOM的实现有不一样的一致程度(某些实现了,某些没有实现)
Document.implementation属性引用 一个DOMImplementation对象,它定义了名为hasFeature()方法,
可以用这个方法,(如果存在的话)查询一个实现是否支持特定的DOM特性(或者模块)
所有的DOM模块的接口
 
特性名   
版本
描述
 
HTML
1.0
1级Core和HTML接口
 
XML
1.0
1级Core和XML接口
 
Core
2.0
2级Core接口
 
HTML
2.0
2级HTML接口
 
XML
2.0
2级XML接口
 
Views
2.0
AbstractView接口
 
StyleSheets
2.0
通用样式表遍历
 
CSS
2.0
CSS样式
 
CSS2
2.0
CSS2Properties接口
 
Events
2.0
事件处理基础结构
 
UIEvents
2.0
用户接口事件(加上Events和Views)
 
MouseEvents
2.0
Mouse事件
 
HTMLEvents
2.0
HTML事件
 
CSS3
 
CSS3Properties接口
 
                     
独立于语言的DOM接口
可以和任务一种语言交互,使用的接口都是DOM接口,但是方法是根据语言和HTML DOM接口的规约相关。
 
可以在语言中通过定义相应的类,来实现这些接口,或者使用这些接口。
 
由于DOM标准定义了接口(这些接口都是为HTML标记、标记中的属性、事件等来定义的),而不是类,所以它没有定义任何构造函数方法,如果想创建一个新的Text对象,
把它插入文档,不能使用如下这样简单的代码
var t=new Text("this is a new text node");//没有构造函数支持。
因为DOM没有定义构造函数,所以DOM标准在Document接口中定义了大量有用的工厂方法。
因此要为文档创建一个新的Text节点,可以用下列代码
var t=document.createTextNode("this is a new text node");
除了工厂方法外
Document.implementation也定义了一些方法,可以通过Document.implementation访问它们。
代码:
 <form name="form1">
<input type="button" name="fbtn" value="创建一个节点" id="bt1" />
</form>
window.onload = function () {
document.form1.fbtn.onclick = function () {
var t = document.createTextNode("文本节点");
document.form1.appendChild(t);
}
}
使用Document段
DocumentFragment是一种特殊类型的节点,它自身不出现在文档中,只作为连续节点集合的临时窗口,
并允许将这些节点作为一个对象来操作。当把一个DocumentFragment插入文档时(用Node对象的appendChild、insertBefore、
replaceChild方法),插入的不是DocumentFragment本身,而是它的所有子节点。
可以向其添加节点,然后一次性将它们全部加入到别的节点中当作子节点。或者其它什么的。
 
 
 
查询选定的文本
在所有现代浏览器中都可以查询选定的文本
window.getSelection
document.getSelection
document.selection
基于浏览器的不同
在火狐中,文本输入元素还定义了selectionStart和selectionEnd属性,可以用来查询或者设置选择的文本。
代码:
 <form name="form1">
<input type="button" name="fbtn" value="查询选定的文本" id="bt1" />
这是一个可选的文本
</form> window.onload = function () {
document.form1.fbtn.onclick = function () {
var s="";
if (window.getSelection)
{
s = window.getSelection();
}
else if (window.Selection)
{
s = window.Selection;
}
else if (document.getSelection)
{
s = document.getSelection();
}
alert(s);
}
}
搜索文档元素
 
Document对象和所有文档元素都有数组属性all[]
这个数组表示文档中的所有元素或者元素中包含所有元素。
all[]数组有一个异常之处,即用tags()方法,可以以标记名获取一个元素数组
如:
var lists=document.all.tags("ul");
 
 

一些 DOM 对象方法

这里提供一些您将在本教程中学到的常用方法:

方法 描述
getElementById() 返回带有指定 ID 的元素。
getElementsByTagName() 返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)。
getElementsByClassName() 返回包含带有指定类名的所有元素的节点列表。
appendChild() 把新的子节点添加到指定节点。
removeChild() 删除子节点。
replaceChild() 替换子节点。
insertBefore() 在指定的子节点前面插入新的子节点。
createAttribute() 创建属性节点。
createElement() 创建元素节点。
createTextNode() 创建文本节点。
getAttribute() 返回指定的属性值。
setAttribute() 把指定属性设置或修改为指定的值。

JavaScript 客户端JavaScript之 脚本化文档的更多相关文章

  1. Javascript学习8 - 脚本化文档(Document对象)

    原文:Javascript学习8 - 脚本化文档(Document对象) 每个Web浏览器窗口(或帧)显示一个HTML文档,表示这个窗口的Window对象有一个document属性,它引用了一个Doc ...

  2. JavaScript权威指南--脚本化文档

    知识要点 脚本化web页面内容是javascript的核心目标. 第13章和14章解释了每一个web浏览器窗口.标签也和框架由一个window对象所示.每个window对象有一个document对象, ...

  3. JavaScript权威设计--JavaScript脚本化文档Document与CSS(简要学习笔记十五)

    1.Document与Element和TEXT是Node的子类. Document:树形的根部节点 Element:HTML元素的节点 TEXT:文本节点   >>HtmlElement与 ...

  4. javascript脚本化文档

    1.getElememtById /** * 获取指定id的的元素数组 */ function getElements(/*ids...*/) { var elements = {}; for(var ...

  5. JavaScript 客户端JavaScript之脚本化HTTP(通过XMLHttpRequest)

    XMLHttpRequest对象的设计目的是为了处理由普通文本或XML组成的响应:但是,一个响应也可能是另外一种类型,如果用户代理(UA)支持这种内容类型的话.   大多数浏览的客户端JavaScri ...

  6. JavaScript 客户端JavaScript之 脚本化浏览器窗口

    1.计时器 客户端Javascript以全局函数setTimeOut().clearTimeOut().setInterval().clearInterval()提供这一功能.   前者是从运行的那一 ...

  7. JavaScript学习笔记7 之DOM文档对象模型

    一.什么是DOMDocument Object Model 文档 -------对象 ----模型-------缩写DOM DOM是针对HTML和XML文档的一个API(应用程序编程接口).DOM描绘 ...

  8. javascript之DOM(Document Object Model) 文档对象模型

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  9. 《javascript高级程序设计》笔记:文档模式

    文档模式是用于指定浏览器使用什么样的标准来正确的显示网页,各个标准的解析存在着差异 文档类型的分类 文档模式大致分为三种类型: 混杂模式(quirks mode) 标准模式(standards mod ...

随机推荐

  1. mapreduce (二) MapReduce实现倒排索引(一) combiner是把同一个机器上的多个map的结果先聚合一次

    1 思路:0.txt MapReduce is simple1.txt MapReduce is powerfull is simple2.txt Hello MapReduce bye MapRed ...

  2. 一个修改过简化版的InputQuery(简单实用,用到了Canvas)

    主要是觉得在单输入的情况下, 原来InputQuery输入框左边的文本太难看了...... function _InputQuery(const ACaption: string; const APr ...

  3. Linux下Apache PHP MYSQL 默认安装路径

    apache: 如果采用RPM包安装,安装路径应在 /etc/httpd目录下apache配置文件:/etc/httpd/conf/httpd.confApache模块路径:/usr/sbin/apa ...

  4. JS线程模型&Web Worker

    js线程模型 客户端javascript是单线程,浏览器无法同时运行两个事件处理程序 设计为单线程的理论是,客户端的javascript函数必须不能运行太长时间,否则会导致web浏览器无法对用户输入做 ...

  5. HDU 4627 There are many unsolvable problem in the world.It could be about one or about zero.But this time it is about bigger number.

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82974#problem/E 解题思路:数论,从一个数的中间开始往两边找,找到两 ...

  6. cf701C They Are Everywhere

    Sergei B., the young coach of Pokemons, has found the big house which consists of n flats ordered in ...

  7. LeetCode题目答案索引

    LeetCode-Two Sum LeetCode-Median of Two Sorted Arrays LeetCode-Longest Substring Without Repeating C ...

  8. 港股street和nominee区别

    股票的street和nominee区别主要用在公司行动的过户费方面,street股票需要收取过户费,nominee不收过户费. street股票通过做公司行动收取过户费后会变成nominee股票,下次 ...

  9. ASP.NET NuGet to install the mvc 5.2.2

    http://www.nuget.org/packages/Microsoft.AspNet.Mvc

  10. Java中对象的上转型对象

    1. 定义 如果B类是A类的子类或间接子类,当用B类创建对象b并将这个对象b的引用赋给A类对象a时,如: A a;a = new B();ORA a;B b = new B();a = b; 则称A类 ...