zoukankan      html  css  js  c++  java
  • JavaScript_DOM(文件对象模型)

    DOM(文档对象模型)是针对 HTML 和 XML 文档的一个 API(应用程序编程接口)。

    DOM 描绘了一个层次化的节点树,允许开发人员添加、移除和修改页面的某一部分。

    DOM1 级将 HTML 和 XML 文档形象地看作一个层次化的节点树,可以使用 JavaScript 来操作这个节点树,进而改变底层文档的外观和结构。
    DOM 由各种节点构成,简要总结如下。

    1.  最基本的节点类型是 Node ,用于抽象地表示文档中一个独立的部分;所有其他类型都继承自Node 。
    2.  Document 类型表示整个文档,是一组分层节点的根节点。在 JavaScript 中, document 对象是Document 的一个实例。使用 document 对象,有很多种方式可以查询和取得节点。
    3.  Element 节点表示文档中的所有 HTML 或 XML 元素,可以用来操作这些元素的内容和特性。
    4. 另外还有一些节点类型,分别表示文本内容、注释、文档类型、CDATA 区域和文档片段。


    访问 DOM 的操作在多数情况下都很直观,不过在处理 <script> 和 <style> 元素时还是存在一些复杂性。

    由于这两个元素分别包含脚本和样式信息,因此浏览器通常会将它们与其他元素区别对待。这些区别导致了在针对这些元素使用 innerHTML 时,以及在创建新元素时的一些问题。
    理解 DOM 的关键,就是理解 DOM 对性能的影响。DOM 操作往往是 JavaScript程序中开销最大的部分,而因访问 NodeList 导致的问题为最多。

    NodeList 对象都是“动态的”,这就意味着每次访问NodeList 对象,都会运行一次查询。有鉴于此,最好的办法就是尽量减少 DOM 操作。

    一、节点层次

    1. DOM 可以将任何 HTML 或 XML 文档描绘成一个由多层节点构成的结构。
    2. 节点分为几种不同的类型,每种类型分别表示文档中不同的信息及(或)标记。
    3. 每个节点都拥有各自的特点、数据和方法,另外也与其他节点存在某种关系。
    4. 节点之间的关系构成了层次,而所有页面标记则表现为一个以特定节点为根节点的树形结构。

     二、Node类型

    DOM1 级定义了一个 Node 接口,该接口将由 DOM 中的所有节点类型实现。这个 Node 接口在JavaScript 中是作为 Node 类型实现的;

    除了 IE 之外,在其他所有浏览器中都可以访问到这个类型。
    JavaScript 中的所有节点类型都继承自 Node 类型,因此所有节点类型都共享着相同的基本属性和方法。

    节点类型由在 Node 类型中定义的下列12 个数值常量来表示,任何节点类型必居其一:

    •  Node.ELEMENT_NODE (1);
    •  Node.ATTRIBUTE_NODE (2);
    •  Node.TEXT_NODE (3);
    •  Node.CDATA_SECTION_NODE (4);
    •  Node.ENTITY_REFERENCE_NODE (5);
    •  Node.ENTITY_NODE (6);
    •  Node.PROCESSING_INSTRUCTION_NODE (7);
    •  Node.COMMENT_NODE (8);
    •  Node.DOCUMENT_NODE (9);
    •  Node.DOCUMENT_TYPE_NODE (10);
    •  Node.DOCUMENT_FRAGMENT_NODE (11);
    •  Node.NOTATION_NODE (12)。

    三、Document 类型

    JavaScript 通过 Document 类型表示文档。在浏览器中, document 对象是 HTMLDocument (继承自 Document 类型)的一个实例,表示整个 HTML 页面。

    而且, document 对象是 window 对象的一个属性,因此可以将其作为全局对象来访问。

    Document 节点具有下列特征:

    •  nodeType 的值为 9;
    •  nodeName 的值为 "#document" ;
    •  nodeValue 的值为 null ;
    •  parentNode 的值为 null ;
    •  ownerDocument 的值为 null ;
    • 其子节点可能是一个 DocumentType (最多一个)、 Element (最多一个)、 ProcessingInstruction或 Comment 。

     四、Element 类型

    除了 Document 类型之外, Element 类型就要算是 Web 编程中最常用的类型了。

    Element 类型用于表现 XML或 HTML元素,提供了对元素标签名、子节点及特性的访问。

    Element 节点具有以下特征:

    •  nodeType 的值为 1;
    •  nodeName 的值为元素的标签名;
    •  nodeValue 的值为 null ;
    •  parentNode 可能是 Document 或 Element ;
    •  其子节点可能是 Element 、 Text 、 Comment 、 ProcessingInstruction 、 CDATASection 或EntityReference 。

    五、Text 类型

    文本节点由 Text 类型表示,包含的是可以照字面解释的纯文本内容。纯文本中可以包含转义后的HTML 字符,但不能包含 HTML 代码。

    Text 节点具有以下特征:

    •  nodeType 的值为 3;
    •  nodeName 的值为 "#text" ;
    •  nodeValue 的值为节点所包含的文本;
    •  parentNode 是一个 Element ;
    •  不支持(没有)子节点。

    可以通过 nodeValue 属性或 data 属性访问 Text 节点中包含的文本,这两个属性中包含的值相同。

    对 nodeValue 的修改也会通过 data 反映出来,反之亦然。

    使用下列方法可以操作节点中的文本。

    •  appendData(text) :将 text 添加到节点的末尾。
    •  deleteData(offset, count) :从 offset 指定的位置开始删除 count 个字符。
    •  insertData(offset, text) :在 offset 指定的位置插入 text 。
    •  replaceData(offset, count, text) :用 text 替换从 offset 指定的位置开始到 offset+count 为止处的文本。
    •  splitText(offset) :从 offset 指定的位置将当前文本节点分成两个文本节点。
    •  substringData(offset, count) :提取从 offset 指定的位置开始到 offset+count 为止处的字符串。

    除了这些方法之外,文本节点还有一个 length 属性,保存着节点中字符的数目。而且,nodeValue.length 和 data.length 中也保存着同样的值。

    六、Comment 类型

    注释在 DOM 中是通过 Comment 类型来表示的。 Comment 节点具有下列特征:

    •  nodeType 的值为 8;
    •  nodeName 的值为 "#comment" ;
    •  nodeValue 的值是注释的内容;
    •  parentNode 可能是 Document 或 Element ;
    •  不支持(没有)子节点。

    Comment 类型与 Text 类型继承自相同的基类,因此它拥有除 splitText() 之外的所有字符串操作方法。

    与 Text 类型相似,也可以通过 nodeValue 或 data 属性来取得注释的内容。

    七、CDATASection 类型

    CDATASection 类型只针对基于 XML 的文档,表示的是 CDATA 区域。与 Comment 类似,
    CDATASection 类型继承自 Text 类型,因此拥有除 splitText() 之外的所有字符串操作方法。
    CDATASection 节点具有下列特征:

    •  nodeType 的值为 4;
    •  nodeName 的值为 "#cdata-section" ;
    •  nodeValue 的值是 CDATA 区域中的内容;
    •  parentNode 可能是 Document 或 Element ;
    •  不支持(没有)子节点。

    CDATA 区域只会出现在 XML 文档中,因此多数浏览器都会把 CDATA 区域错误地解析为 Comment或 Element 。

    八、DocumentType 类型

    DocumentType 类型在 Web 浏览器中并不常用,仅有 Firefox、Safari 和 Opera 支持它。

    Document-Type 包含着与文档的 doctype 有关的所有信息,它具有下列特征:

    •  nodeType 的值为 10;
    •  nodeName 的值为 doctype 的名称;
    •  nodeValue 的值为 null ;
    •  parentNode 是 Document ;
    •  不支持(没有)子节点。

    九、DocumentFragment 类型

    在所有节点类型中,只有 DocumentFragment 在文档中没有对应的标记。

    DOM 规定文档片段(document fragment)是一种“轻量级”的文档,可以包含和控制节点,但不会像完整的文档那样占用额外的资源。

    DocumentFragment 节点具有下列特征:

    •  nodeType 的值为 11;
    •  nodeName 的值为 "#document-fragment" ;
    •  nodeValue 的值为 null ;
    •  parentNode 的值为 null ;
    •  子节点可以是 Element 、 ProcessingInstruction 、 Comment 、 Text 、 CDATASection 或EntityReference 。

    虽然不能把文档片段直接添加到文档中,但可以将它作为一个“仓库”来使用,即可以在里面保存将来可能会添加到文档中的节点。

    十、Attr 类型

    元素的特性在 DOM 中以 Attr 类型来表示。在所有浏览器中(包括 IE8),都可以访问 Attr 类型的构造函数和原型。

    从技术角度讲,特性就是存在于元素的 attributes 属性中的节点。

    特性节点具有下列特征:

    •  nodeType 的值为 2;
    •  nodeName 的值是特性的名称;
    •  nodeValue 的值是特性的值;
    •  parentNode 的值为 null ;
    •  在 HTML 中不支持(没有)子节点;
    •  在 XML 中子节点可以是 Text 或 EntityReference 。

    尽管它们也是节点,但特性却不被认为是 DOM 文档树的一部分。

    开发人员最常使用的是 getAt-tribute() 、 setAttribute() 和 remveAttribute() 方法,很少直接引用特性节点。

  • 相关阅读:
    设计模式之简单数据工厂
    Linux CPU affinity
    QT操作Excel(通过QAxObject使用了OLE,前提是本地安装了Excel)
    QT 4.2.2的安装(安装完还要再编译,注意设置Windows Path)
    你要看透的56条人生哲理(还可以)
    提升Delphi编程效率必须使用的快捷键(Delphi2007版本)
    Delphi中复制带有String的记录结构时不能使用Move之类的内存操作函数
    普林斯顿大学算法公开课(1)----介绍
    iOS7 初体验
    SQL Server 性能优化之——系统化方法提高性能
  • 原文地址:https://www.cnblogs.com/zhangzimuzjq/p/11864539.html
Copyright © 2011-2022 走看看