《DOM Scripting》 - 阅读笔记

DOM Scripting - Web Design with JavaScript and the Document Object Model,Jeremy Keith
中文名:JavaScript DOM 编程艺术

用了一周的时间看完了这本书,其实内容还是很简单的,顺便用来学习英语,积累了一些单词。
读完一本书不容易,总要做些记录,才够本儿。

DOM,文档对象模型,D表示文档,web页面;D表示对象,document对象;M表示模型,浏览器提供的一种web页面的映射(模型),你可用JavaScript来读写该映射。(生硬的翻译。。。)

JavaScript中有三种对象:用户定义的对象,JavaScript中内置的对象和浏览器提供的对象(Host Object)。
浏览器提供的最基本的是window对象,该对象就表示一个浏览器窗口。window对象的方法和属性通常通过浏览器对象模型(BOM)来引用。
document对象表示html文档,而本书的主题就是讨论document对象的属性及方法。

一个文档就是一些结点的集合,这些结点组成树状结构,称为文档树。一个文档就是一个结点树。

结点类型包括元素结点,文本结点,属性结点。

1. document.write
document对象的write方法提供了一个简单快速的方式来插入一个字符串到文档。

2. innerHTML
浏览器引入的innerHTML属性,用于读写元素内的HTML。
使用innerHTML,元素内的HTML将全部被替换。

innerHTML比document.write更好。使用innerHTML能保持JS和标记的分离,不必插入<script>标记

找到结点

1. element = document.getElementById(ID);
根据id获得元素结点,如果不存在则返回null

2. element = document.getElementByTagName();
根据标签获得结点的数组。

3. booleanValue = element.hasChildNodes;
判断是否有子结点。
文本结点和属性结点没有子结点,所以应用该方法返回false。

4. object.getAttribute(attribute);
获得属性结点。
若没有该结点,则返回null

操作结点

1. var para = document.createElement("p");
创建元素结点

2. var txt = createTextNode("Hello World");
创建文本结点

3. para.appendChild(txt);
txt结点作为子结点插入到para中

4. reference = element.insertBefore(newNode,targetNode);
插入元素到已存在元素的前面
如果不指定targetNode,则插入到element的子结点的末尾。

5. paraElement.insertAfter(newElement,targetElement);
插入元素到已存在元素的后面
这个方法是自己作者写的

1 function insertAfter(newElement,targetElement) {
2     var parent = targetElement.parentNode;
3     if (parent.lastChild == targetElement) {
4         parent.appendChild(newElement);
5         } else {
6     parent.insertBefore(newElement,targetElement.nextSibling);
7     }
8 }    

6. reference = node.cloneNode(true)
复制结点,并复制子结点
reference = node.cloneNode(false)
复制结点,但不复制子结点

7. reference = element.removeChild(node)
移除结点并返回该节点,该结点的子结点也被删除。

8. reference = element.replaceChild(newChild,oldChild)
替换element的子结点oldChild.
如果新结点有子结点,也被插入到文档中

结点属性

1. name = node.nodeName;
获得结点的名字

2. integer = node.noteType;
获得结点的类型

1. ELEMENT_NODE
2. ATTRIBUTE_NODE
3. TEXT_NODE
4. CDATA_SECTION_NODE
5. ENTITY_REFERENCE_NODE
6. ENTITY_NODE
7. PROCESSING_INSTRUCTION_NODE
8. COMMENT_NODE
9. DOCUMENT_NODE
10. DOCUMENT_TYPE_NODE
11. DOCUMENT_FRAGMENT_NODE
12. NOTATION_NOD

3. value = node.nodeValue;
获得结点值。
若为属性结点,返回属性值,若为文本结点,则返回文本内容,若为元素结点,则返回null。
示例:获得段落内的文本<p>这是一段文本</p>
description.childNodes[0].nodeValue
分析:首先获得p的子结点—文本结点,然后得到文本结点的值——文本。因为段落内的文本是一个不同的结点,这个文本是段落的第一个子结点

4. object.setAttribute(attribute,value)
设置结点属性及其值

遍历结点树的方法

1. nodeList = node.childNodes
获得子结点的列表

2. node.childNotes.length
获得子结点的数量

3. reference = node.firstChild
获得第一个子结点

4. reference = node.lastChild
获得最后一个子结点

5. reference = node.nextSibling
获得下一个结点

6. reference = node.previousSibling
获得上一个结点

7. reference = node.parentNode
获得父结点

操作CSS

每个元素都是一个对象,每个对象都有一些属性。
其中一些属性表示结点在结点树中的位置信息,比如:parentNode,childNotes等等。
还有一些属性,包含元素本身的信息,比如:nodeType和nodeName
还有一些属性,叫做样式属性,包含了该元素的样式。查询样式属性返回一个对象,JavaScript通过读写该对象可以控制元素的样式。
element.style.preperty
JavaScript会把"-"当作减号,所以采用驼峰命名法来引用样式属性,下面是一些示例

CSS 
JavaScript

color color
font-family fontFamily
background-color backgroundColor
font-weight fontWeight
margin-top-width marginTopWidth

也可以使用类名属性来控制元素的样式
1. element.className

如果原来已有类名,可以这样写来添加类
2. element.className += "intro"

动画

1. variable = setTimeout("function",interval)
一段时间后执行函数

2. clearTimeout(variable)
取消延迟启动

1. variable = setInterval("function",interval);
每隔一段时间执行函数

2. clearInterval(variable)
取消重复执行

3. parseInt
把字符串转换为整数

4. parseFloat
把字符串转换为浮点数

Ajax

XMLHttpRequest对象
IE创建语法
var waystation = new ActiveXObject("Microsoft.XMLHTTP");

其他浏览器语法:
var waystation = new XMLHttpRequest();

为了同时满足上述两种实现,写一个函数来解决:

 1 function getHTTPObject(){
 2     if(window.ActiveXObject){
 3         var waystation = new ActiveXObject("Microsoft.XMLHTTP");
 4     } else if(window.XMLHttpRequest){
 5         var waystation = new XMLHttpRequest();
 6     } else {
 7         var waystation = false;
 8     }
 9     return waystation;
10 }

XMLHttpRequest对象有许多方法,其中最有用的是open。
open方法用来指向服务器上文件对象,也可指定HTTP请求:GET,POST,SEND,第三个参数指定是否请求是同步的。
初始化GET请求:请求一个example.txt文件
request.open("GET","example.txt",true);

当服务器返回响应,触发onreadystatechange事件处理器,将会调用执行doSomthing。

1 request.onreadystatechange = doSomthing
2 request = getHTTPObject();
3 request.open("GET","example.txt",true);
4 request.onreadystatechange = doSomething;
5 request.send(null);

需要写一个doSomething函数来处理响应。
当服务器返回响应到XMLHttpRequest对象,大量属性就可以使用了。
readyState属性是一个实时更新的数字值当服务器处理请求时:
0 uninitialzed
1 loading
2 loaded
3 interactive
4 complete
当readyState属性值为4,则可以访问服务器返回的数据了。
通过responseText属性来以字符串文本的形式访问数据。如果返回数据Content-Type头为"text/html",则也可以用responseXML属性来访问。

1 function doSomething(){
2     if(request.readyState == 4){
3     alert(request.responseText);
4     }
5 }

渐进增强的Ajax

Ajax的成功表明一件事:一个简洁的名字有助于理解一个想法。Ajax比“具有DOM脚本,CSS和HTML的XMLHttpRequest”更容易理解,那么我用Hijax来代替“渐进增强的Ajax”也是简化理解。

Ajax的能力依赖服务器,服务端编程语言做了大部分实际工作。XMLHttpRequest就像是一个在浏览器和服务器之间的网关(gateway),传输请求和响应。如果网关被移除了,仍可以发送请求和接受响应,但时间更长。

时间: 2024-10-18 15:53:52

《DOM Scripting》 - 阅读笔记的相关文章

《The C Programing Language》阅读笔记

<The C Programing Language> 要理解一种程序语言,而不仅仅只是会使用它. -----我的心声 介绍部分: 作者 C语言设计者 Kernighan  Ritchie  标准C语言及其程序设计方法 应用级编程两个主流语言 C++  Java 都建立于C的语法和基本结构上 现在世界上许多软件都是C语言及其衍生的各种语言的基础上开发出来的. C在传播中,肯定会有变化和进展,88年 ANSI(美国国家标准协会) 为C语言指定了一个精确的标准.即ANSI C. 自C诞生之后,C悄

CI框架源码阅读笔记4 引导文件CodeIgniter.php

到了这里,终于进入CI框架的核心了.既然是"引导"文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.com/usr/reg 经过引导文件,实际上会交给Application中的UsrController控制器的reg方法去处理. 这之中,CodeIgniter.php做了哪些工作?我们一步步来看. 1.    导入预定义常量.框架环境初始化 之前的一篇博客(CI框架源码阅读笔记2 一切的入

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

javascript高级程序设计阅读笔记(一) 工作之余开发些web应用作为兴趣,在交互方面需要掌握javascript和css.HTML5等技术,因此读书笔记是必要的. javascript简介 JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能. 文档对象模型 DOM doc

论文《Chinese Poetry Generation with Recurrent Neural Network》阅读笔记

这篇文章是论文'Chinese Poetry Generation with Recurrent Neural Network'的阅读笔记,这篇论文2014年发表在EMNLP. ABSTRACT 这篇论文提出了一个基于RNN的中国古诗生成模型. PROPOSED METHOD 第一句的生成 第一句的生成是规则式的. 先自定义几个keywords,然后通过<诗学含英>(这是清朝人编写的)扩展出更多的相关短语.然后生成所有满足格式约束(主要是音调方面的)的句子,接下来用一个语言模型排个序,找到最好

《构建之法阅读笔记02》

这次主要对<构建之法>的第四章“两人合作”作一次阅读笔记. 首先是代码规范问题. 我过去对于代码规范问题并没有做到注意.在编程中,许多变量和函数的命名都非常的简单而没有实际的意义.而且编程时不注意对齐缩进.很多时候也不加注释,导致对这些简单的变量名称不熟悉. 这样做会使得很多人读代码费劲,甚至是自己都要花时间再次阅读懂自己的代码.而且很多没必要的注释也会使得注释失去意义.当自己再次在原基础上编程时,可能要重新编程等问题. 因此,通过阅读“代码规范”,我找到一些解决方法.代码的风格要简明.易读.

《代码阅读方法与实践》阅读笔记之二

时间过得真快,一转眼,10天就过去了,感觉上次写阅读笔记的场景仿佛还历历在目.<代码阅读方法与实践>这本书真的很难写笔记,本来我看这本书的名字还以为书里大概写的都是些代码阅读的简易方法,心想着这就好写笔记了,没想到竟然好多都是我们之前学过的东西,这倒让我有点无从下手了.大概像我们这些还没有太多经历的大学生,总是习惯于尽量避免自己的工作量,总是试图找到一些完成事情的捷径吧.总之,尽管我不想承认,但我自己心里很清楚,我就是这种人.下面开始言归正传,说说接下来的几章内容归纳. 这本书在前面已经分析了

《大道至简》阅读笔记1

<大道至简>阅读笔记1 不知不觉间看完了第一章,从这个章节里我看到了一些我们都明白可是却自己很难做到的道理. 书中从愚公移山的故事和编程相结合给出了编程的精义就是顺序.分支.循环,这些都是我们所熟悉的,也是老师在教学中耳提面命的,可是我们又有几个人能做到呢. 我们总是在找着各种各样的学不好学不会理由,“它太难了”,“我太笨了”,认真的想一想难道真的是它太难了或者是自己太笨了么?不,答案是否定的,追根究底是懒惰,是没能坚持.从根本上来说,不存在会不会写程序的问题,除了先天智障和后天懒惰者,这要你

CI框架源码阅读笔记3 全局函数Common.php

从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap引导文件都会最先引入全局函数,以便于之后的处理工作). 打开Common.php中,第一行代码就非常诡异: if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 上一篇(CI框架源码阅读笔记2 一切的入口 index

构建之法阅读笔记05

2017.5.20 今天阅读的是<构建之法>第8章需求分析的阅读笔记,我们如果要开始做一个软件,最先要进行的就是需求分析,我们应该充分的了解我们这个软件是否具有前景,我们为用户提供的服务是不是用户所需要的,这一章详细的叙述了如何进行需求分析. 首先是获取和引导需求,我们应该找到软件的利益相关者,了解挖掘他们对软件的需求,引导他们表达出真实的需求.然后分析和定义需求,对各个方面的需求进行规整,定义需求内涵,从各个角度将需求量化,然后估计实现这些需求所需要的时间和资源,确定各个需求的优先级.紧接着

《构建之法》阅读笔记(2)

<构件之法>阅读笔记2 看了前面两章,我感觉我现阶段距离一个程序员还很远,软件工程师更是遥不可及.在学校的我学习了很多,如c++,数据结构,面向对象--学的多而不精,纵观现在我就是一个盲目学习的学生,上课时认真听了课后却没有花更多的时间去研究,遇到不懂的容易掉价死胡同,总是花很多时间闷闷思考,不到最后都没有去请教同学,去百度.看着其他很厉害的同学,自己就只能在一旁羡慕嫉妒恨.那现在在怎么样才能将自己对编程的兴趣提高,加强自己的编程思想?提高自己的价值?能够尽早地迈进程序员.软件工程师的行列之中