DOM可以将任何HTML和XML文档描绘成一个由多层次节点构成的结构。节点分为几种不同的类型,每种类型分别表示文档中不同的信息,每种类型都继承与Node接口,因此都共同享有一些属性和方法,同时,也拥有各自的特点、数据和方法。另外,每个节点都与其余节点存在一些关系。

一、节点树

以下面代码为例,先简单介绍一下:

<html>
<head>
    <title>Sample Page</title>
</head>
<body>
    <p>Hello world</p>
</body>
</html>

  这段代码的节点树表示如图(由三种类型的节点组成:Document/Element/Text):

二、节点共有的属性和方法

三、不同类型节点的介绍

1、Document类型

  document对象是Document类型的一个实例,表示整个html页面,并具有以下的属性和方法:

2、Element类型

  Element类型主要提供了对元素标签名、子节点和特性的访问。元素中所有指定的信息,可以通过以下代码来获取:

<html>
<head>
    <title>Sample Page</title>
</head>
<body>
    <div id="myDiv" class="bd" title = "Body text" lang = "en" dir = "ltr"></div>
<script>
    var div = document.getElementById("myDiv");
    alert(div.id);
    alert(div.className);
    alert(div.title);
    alert(div.lang);
    alert(div.dir);
</script>
</body>
</html>

  也可以通过操作DOM的方法来获取、修改、移除相应的属性,方法有:getAttribute()、setAttribute()、removeAttribute(),以getAttribute()为例:

<html>
<head>
    <title>Sample Page</title>
</head>
<body>
    <div id="myDiv" class="bd" title = "Body text" lang = "en" dir = "ltr"></div>
<script>
    var div = document.getElementById("myDiv");
    alert(div.getAttribute("id"));
    alert(div.getAttribute("class"));
    alert(div.getAttribute("title"));
    alert(div.getAttribute("lang"));
    alert(div.getAttribute("dir"));
</script>
</body>
</html>

3、Text类型

  文本节点由Text类型表示,包含的是可以照字面解释的纯文本内容。在默认情况下,每个包含内容的元素最多也只能有一个文本节点,而且必须有内容存在。

<!-- 没有内容,也就没有文本节点 -->
<div></div>

<!-- 有空格,因此有一个文本节点 -->
<div> </div>

<!-- 有内容,因而有一个文本节点 -->
<div>Hello World!</div>    

4、Comment类型

  注释在DOM中是通过comment类型来表示的。注释节点可以通过其父节点来访问:

<html>
<head></head>
<body>
    <div id="myDiv"><!--A comment--></div>
<script>
    var div = document.getElementById("myDiv");
    var comment = div.firstChild;
    alert(comment.data);
</script>
</body>
</html>

  另外,通过document.createComment()也可以创建注释节点。

5、CDATASection类型

  CDATASection类型只针对XML的文档,表示的是CDATA区域。

6、DocumentType类型

  DocumentType类型在web浏览器中并不常见,并且该类型的对象不能动态创建。

7、Document.Fragment类型

  Document.Fragment类型在文档中没有对应的标记,虽然不能把它直接添加到文档中,但是它可以作为一个“仓库”来使用,可以在里面保存将来会添加到文档中的节点。如下例所示,如果单独为<ul>元素添加3个列表项,将会导致浏览器反复渲染;通过文档片段来保存列表项,然后一次性的添加它们,可以避免这个问题。

<html>
<head></head>
<body>
    <ul id="myList"></ul>
<script>
    var fragment = document.createDocumentFragment();
    var ul = document.getElementById("myList");
    var li = null;
    for(var i = 0; i < 3; i++){
        li = document.createElement("li");
        li.appendChild(document.createTextNode("Item" + i));
        fragment.appendChild(li);
    }
    ul.appendChild(fragment);
</script>
    </body>
</html>

8、Attr类型

  Attr类型表示的是存在于元素属性中的节点,尽管它被认为是节点,但是并不存在于文档树中,通常使用getAttribute()、setAttribute()、removeAttribute()访问,很少直接引用Attr节点。

四、DOM操作技术

  DOM操作是JAVASCRIPT中开销最大的操作,以下介绍动态插入脚本、动态修改CSS样式。

1、动态脚本

<!-- 动态插入外部文件 -->
<script>
    function loadScript(url){
        var script = document.createElement("script");
        script.type = "text/javascript";
        script.scr = url;
        document.body.appendChild(script);
    }
    loadScript("client.js");
</script>
<!-- 直接插入javascript代码 -->
<script>
    function loadScriptString(code){
        var script = document.createElement("script");
        script.type = "text/javascript";
        try{
            // 如果出错,说明是IE
            script.appendChild(document.createTextNode(code));
        }catch(ex){
            script.text = code;
        };
        document.body.appendChild(script);
    }
    loadScript("function sayHi(){alert('Hi');}]");
</script>

2、动态样式

  动态样式是指页面刚加载时,不存在的样式;动态样式是在页面加载完后,动态添加到页面中的。

<!-- 动态插入外部样式表 -->
<script>
    function loadStyles(url){
        var link = document.createElement("link");
        link.type = "text/css";
        link.href = url;
        document.body.appendChild(link);
    }
    loadStyles("styles.css");
</script>
<!-- 直接插入样式代码 -->
<script>
    function loadStyleString(css){
        var style = document.createElement("style");
        style.type = "text/css";
        try{
            // 如果出错,说明是IE
            style.appendChild(document.createTextNode(css));
        }catch(ex){
            style.StyleSheet.cssText = css;
        };
        var head = document.getElementsByTagName("head")[0];
        head.appendChild(head);
    }
    loadStyleString("body{background-color:red}");
</script>

《JAVASCRIPT高级程序设计》节点层次和DOM操作技术的更多相关文章

  1. 【javascript学习——《javascript高级程序设计》笔记】DOM操作

    DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序编程接口).DOM描绘了一个层次节点树,允许开发人员添加.移除和修改. 1.节点层次 <html> <head& ...

  2. 《JavaScript高级程序设计》笔记:DOM(十)

    Node类型 nodeType以下是一些重要的nodeType的取值:1: 元素element2: 属性attr3: 文本text8: 注释comments9: 文档document nodeName ...

  3. 读书时间《JavaScript高级程序设计》五:DOM

    DOM(文档对象模型)是针对HTML文档的一个API,描绘了一个层次化的节点树,可以添加.移除.修改页面的某一部分. 一个简单的文档结构 <!DOCTYPE html> <html& ...

  4. 《JavaScript高级程序设计》笔记:DOM扩展(十一)

    选择符API querySelector()方法 // 取得body元素 var tbody = document.querySelector('body'); // 取得ID为"myDIV ...

  5. 《JavaScript高级程序设计(第3版)》阅读总结记录第一章之JavaScript简介

    前言: 为什么会想到把<JavaScript 高级程序设计(第 3 版)>总结记录呢,之前写过一篇博客,研究的轮播效果,后来又去看了<JavaScript 高级程序设计(第3版)&g ...

  6. 《JavaScript高级程序设计》读书笔记--前言

    起因 web编程过程使用javascript时感觉很吃力,效率很低.根本原因在于对javascript整个知识体系不熟,看来需要找些书脑补一下,同时欢迎众网友监督. 大神推荐书籍 看了博客大神们推荐的 ...

  7. 读书笔记(05) - 事件 - JavaScript高级程序设计

    HTML依托于JavaScript来实现用户与WEB网页之间的动态交互,接收用户操作并做出相应的反馈,而事件在此间则充当桥梁的重要角色. 日常开发中,经常会为某个元素绑定一个事件,编写相应的业务逻辑, ...

  8. 读书笔记(03) - 性能 - JavaScript高级程序设计

    作用域链查找 作用域链的查找是逐层向上查找.查找的层次越多,速度越慢.随着硬件性能的提升和浏览器引擎的优化,这个慢我们基本可以忽略. 除了层级查找损耗的问题,变量的修改应只在局部环境进行,尽量避免在局 ...

  9. javascript高级程序设计阅读笔记(一)

    javascript高级程序设计阅读笔记(一) 工作之余开发些web应用作为兴趣,在交互方面需要掌握javascript和css.HTML5等技术,因此读书笔记是必要的. javascript简介 J ...

随机推荐

  1. Big Data架构师技能图谱

    大数据通用处理平台 Spark Flink Hadoop 分布式存储 HDFS 资源调度 Yarn Mesos 机器学习工具 Mahout Spark Mlib TensorFlow (Google ...

  2. chart.js在html中画曲线图

    http://www.bootcss.com/p/chart.js/docs/ http://www.chartjs.org/docs/   中有详细讲解 一.简介 Chart.js是一个基于HTML ...

  3. 反射技术在Android中的应用

    本博客转自:http://blog.csdn.net/tiefeng0606/article/details/51700866 动态语言: 一般认为在程序运行时,允许改变程序结构或变量类型,这种语言称 ...

  4. sencha cmd常用命令汇总

    一.sencha generate:自动生成项目或者代码 1.sencha generate app 项目名称 生成路径 :生成一个新的extjs项目 注明:以上命令会从官网下载试用版本的ext代码到 ...

  5. hdu 2614

    #include<stdio.h> int map[99][99]; int vist[99]; int sum=1; int maxsum=1; int max=0; int N; vo ...

  6. 以太网数据包、IP包、TCP/UDP 包的结构(转)

    源:以太网数据包.IP包.TCP/UDP 包的结构 版本号(Version):长度4比特.标识目前采用的IP协议的版本号.一般的值为0100(IPv4),0110(IPv6). IP包头长度(Head ...

  7. stm8的独立看门狗与窗口看门狗

    STM8拥有两个硬件看门狗,分别叫做独立看门狗和窗口看门狗 独立看门狗的框图如下 我们可以看到,独立看门狗的时钟来自于LSI内部低速振荡器,经过二分频到达看门狗外设单元,在经过一个七位的预分频到达计数 ...

  8. awk程序设计语言之-awk基础

    awk程序设计语言之-awk基础 http://man.linuxde.net/ 常用工具命令之awk命令 awk是一种编程语言,用于在Linux/Unix下对文本和数据处理.数据可以来自标准输入(s ...

  9. iOS开发~CocoaPods使用详细说明 分类: ios相关 2015-04-01 16:45 68人阅读 评论(0) 收藏

    iOS开发-CocoaPods使用详细说明 一.概要 iOS开发时,项目中会引用许多第三方库,CocoaPods(https://github.com/CocoaPods/CocoaPods)可以用来 ...

  10. java--面向对象编程

    instanceof的用法 静态绑定,即早期绑定,首先找父类 动态绑定,即运行时绑定,new谁找谁 Object o1 = null; //正确的语法,null也是一种特殊的引用数据类型 object ...