快速了解JavaScript的DOM模型( 二 )


Node中提供了几种节点遍历的属性:parentNode、childNodes、firstNode/lastNode、
previousSibling/nextSibling、ownerDocument 。
DocumentJavaScript通过Document类型表示文档 。浏览器中的document对象是HTMLDocument的一个实例,表示整个HTML页面 。Document节点具有以下特征:

  • nodeType为Node.DOCUMENT_NODE,值为9 。
  • nodeName的值为#document 。
  • nodeValue的值为null 。
  • parentNode的值为null 。
  • ownerDocument的值为null 。
  • 其子结点可能是一个DocumentType、Element、ProcessingInstruction或Comment 。
document对象还有一些属性来表示网页的一些信息:
  • title:取得当前页面的标题,也可以修改当前页面的标题并反映在浏览器的标题栏中 。但不会改变<title>元素 。
  • URL:包含页面完整的URL 。
  • domain:只包含页面的域名 。
  • referrer:保存着链接到当前页面的那个页面的URL 。没有来源页面的情况下,可能包含空字符串 。
URL与domain属性是相互关联的 。
ElementElement类型用于表现XML或HTML元素,提供对元素标签名、子节点及特性的访问 。例如<body>和<div>等 。Element节点具有以下特征:
  • nodeType为Node.ELEMENT_NODE,值为1 。
  • nodeName的值为元素的标签名 。
  • nodeValue的值为null 。
  • parentNode可能是Document或Element 。
  • 其子节点可能是Element、Text、Comment、ProcessingInstruction、CDATASection或EntityReference 。
要访问元素的标签名,可以使用nodeName属性,也可以使用tagName属性;这两个属性会返回相同值 。
获取<div id="divId"></div>的标签名:
var div = document.getElementById("divId");console.log(div.tagName);// DIVconsole.log(div.tagName == div.nodeName);// true特性和属性所有HTML元素都由HTMLElement类型表示,不能直接通过这个类型,也是通过它的子类型来表示 。HTMLElement类型直接继承自Element并添加了一些属性 。每个HTML元素中的特性(例如<div id="d1" title="附加信息" lang="en" class="container">中的id、class等)会自动变成DOM对象的属性(class特性与className属性对应) 。这些都可以通过div.id等获取并赋值 。
一个元素中的id等是标准的特性,但也有非标准的特性不能使用div.id方式获取 。那么要用什么方法来访问非特性 。
DOM主要提供了几个方法用于对任何特性进行操作,分别是:
  • hasAttribute(qualifiedName: string),检查qualifiedName这个特性是否存在 。
  • getAttribute(qualifiedName: string),获取qualifiedName这个特性值,如果不存在,则返回null 。
  • setAttribute(qualifiedName: string, value: string),设置qualifiedName这个特性的值为value 。设置的特性名会被同意转换为小写形式 。
  • removeAttribute(qualifiedName: string),移除qualifiedName这个特性 。
<div id="d1" title="附加信息" lang="en" class="container main" plug-add="添加的非标准的特性">以上面的HTML为例,使用这几种方法 。
var div = document.getElementById('d1');div.getAttribute('title');// 附加信息div.hasAttribute('plug-add'); // truediv.setAttribute('title', '修改附加信息');div.removeAttribute('plug-add');有两类特殊的特性,虽有对应的属性名,但属性的值与getAttribute()返回的值并不相同 。
【快速了解JavaScript的DOM模型】第一类特性就是style,用于通过css为元素指定样式 。通过getAttribute()返回的style中包含的是CSS文本,而通过属性返回的是一个对象 。
第二类特性是onclick这样的事件处理 。如果通过getAttribute()返回的是相应代码的字符串 。而访问onclick属性返回的是JavaScript函数(如果未指定相应特性,返回的是null) 。
attributes属性Element类型的attributes属性返回该元素所有属性节点的一个集合,该集合是一个"动态"的NamedNodeMap对象 。NamedNodeMap对象拥有下列方法 。