《JavaScript高级程序设计》第10-11章

第十章 DOM

1、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);每个节点都有一个nodeType属性

1)节点关系:每个节点都有一个childNodes属性,其中保存着一个NodeList对象,可以通过方括号以及item()方法来访问NodeList,可以通过length属性来表示访问NodeList那一刻的节点数量;每个节点都有一个parentNode属性,该属性指向文档树中的父节点;通过使用childNodes列表中每个节点的previousSibling和nextSibling属性,可以访问同一列表中的其他节点,childNodes列表中的第一个节点的previousSibling属性值为null,childNodes列表中的最后一个节点的nextSibling属性值为null;父节点的firstChild和lastChild属性分别指向其childNodes列表中的第一个和最后一个节点;每个节点都有一个ownerDocument属性,该属性指向表示整个文档的文档节点

2)操作节点:appendChild()方法用于向childNodes列表的末尾添加一个节点,添加节点后,childNodes的新增节点、父节点和以前的最后一个子节点的关系指针就会相应地得到更新,更新完成后,appendChild()返回新增节点;insertBefore()方法用于向childNodes列表中的某个特定位置之前添加一个节点,接收两个参数——要插入的节点和作为参照的节点,如果参照节点是null,则insertBefore()与appendChild()执行相同的操作;replaceChild()用于向childNodes列表中的某个特定位置替换一个节点,接收两个参数——要插入的节点和要替换的节点;remove()用于向childNodes列表中的某个特定位置移除一个节点,接收一个参数——要移除的节点,remove()返回被移除的节点,被移除的节点仍然为文档所有,只不过在文档中已经没有位置

3)其他方法:cloneNode()用于创建这个方法的节点的一个完全相同的副本,接收一个布尔值参数,表示是否执行深复制,在参数为true的情况下执行深复制,复制节点及整个子节点树,否则执行浅复制,只复制节点本身;normalize()用于处理文档树中的文本节点,如果找到空文本节点就删除它,如果找到相邻的文本节点就将它们合并为一个文本节点

2、Document类型:用于表示HTML页面或基于XML的文档以及作为HTMLDocument实例的document对象

1)Document节点:nodeType的值为9;nodeName的值为”#document”;nodeValue的值为null;parentNode的值为null;ownerDocument的值为null;其子节点可能是一个DocumenType(最多一个)、Element(最多一个)、ProcessingInstruction或Comment

2)文档的子节点:document.documentElement属性用于指向HTML页面中的<html>元素;document.body属性用于指向HTML页面中的<body>元素;document.doctype属性用于指向HTML页面中的<!DOCTYPE>元素

3)文档信息:document.title属性包含<title>元素的文本;document.URL属性包含页面完整的URL(地址栏中显示的URL);document.domain属性包含页面的域名,可以手动设置,不过不能由loose转为tight;document.referrer属性包含链接到当前页面的那个页面的URL

4)查找元素:document.getElementsById()接收一个参数——要取得的元素的ID(区分大小写),如果找到相应的元素则返回该元素,否则返回null;document.getElementsByTagName()接收一个参数——要取得的元素的标签名,返回的是包含零或多个元素的NodeList,在HTML文档中返回一个HTMLCollection对象,可以通过方括号中传入数值或字符串形式的索引值或者通过对数值数值索引调用item()、对字符串索引调用namedItem()取得元素;document.getElementsByTagName()接收一个参数——要取得的元素的name,常常用于取得单选按钮,返回一个HTMLCollection对象

5)特殊集合:document.anchors包含文档中所有带name特性的<a>元素;document.applets包含文档中所有的<applet>元素;document.forms包含文档中所有的<form>元素;document.images包含文档中所有的<img>元素;document.links包含文档中所有带href特性的<links>元素;

6)DOM一致性检测:document.implementation属性用于提供DOM的信息和功能,与浏览器对DOM的实现相对应;DOM1只为document.implementation规定了一个方法hasFeature(),接收两个参数——要检测的DOM功能的名称和版本号,如果浏览器支持给定名称和版本的功能,则返回true

7)文档写入:write()和writeln()方法都接收一个字符串参数——要写入到输出流中的文本,write()会原样写入,writeln()则会在字符串的末尾添加一个换行符;open()和close()分别用于打开和关闭网页的输出流,如果是在页面加载期间

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

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

2)标准特性:id表示元素在文档中的唯一标识符;title表示有关文档的附加信息;lang表示元素内容的语言代码;dir表示语言的方向,值为ltr或rtl;className与元素的class特性对于

3)操作特性:getAttribute()接收一个参数——要取得的特性名,取得实际特性或自定义特性的值;setAttribute()接收两个参数——要设置的特性名和值;removeAttribute()接收一个参数——要删除的特性名

4)attributes属性:Element类型是使用attributes属性的唯一一个DOM节点类型,attributes属性中包含一个NamedNodeMap对象;getNamedItem(name)返回nodeName属性等于name的节点;removeNamedItem(name)从列表中删除nodeName属性等于name的节点;setNamedItem(node)向列表中添加节点,以节点nodeName属性为索引;item(pos)返回位于数字pos位置处的节点

5)创建元素:document.createElement()用于创建一个新元素,接收一个参数——要创建的元素的标签名;要把新元素添加到文档树中,可以使用appendChild()、insertBefore()、replaceChild()方法

6)元素的子节点:元素的childNodes属性中包含了它的所有的子节点

4、Text类型:包含的是可以按照字面解释的纯文本内容

1)Text节点:nodeType的值为3;nodeName的值为”#text”;nodeValue的值为节点所包含的文本;parentNode是一个Element;不支持子节点

2)操作文本节点: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为止处的字符

3)创建文本节点:document.createTextNode()创建新文本节点,接收一个参数——要插入节点中的文本

4)规范文本节点:element.normalize()将相邻地同胞文本节点合并

5)分割文本节点:splitText()将一个文本节点分成两个文本节点,接收一个参数——要分割的位置,原来的文本节点将包含从开始到指定位置之前的内容,新文本节点将包含剩下的文本

5、Comment类型:用于表示注释

1)Comment节点:nodeType的值为8;nodeName的值为”#comment”;nodeValue的值为注释的内容;parentNode可能是Document或Element;不支持子节点

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

6、CDATASection类型:只针对基于XML的文档,表示的是CDATA区域

7、DocumentType类型:包含着与文档的doctype有关的所有信息

1)nodeType的值为10;nodeName的值为doctype的名称;nodeValue的值为null;parentNode可能是Document;不支持子节点

8、DocumentFragment类型:用于包含和控制节点,但不会占用额外的资源

1)DocumentFragment节点:nodeType的值为11;nodeName的值为”#document-fragment”;nodeValue的值为null;parentNode的值为null;其子节点可能是Element、Text、Comment、ProcessingInstruction、CDATASection或EntityReference

2)创建文档片段:document.createDocumentFragment()用于保存将来可能要添加到文档中的节点

3)添加文档片段:appendChild()或insertBefore()用于将文档片段中的所有子节点添加到相应文职

9、Attr类型:用于表示元素的特性

1)Attr节点:nodeType的值为2;nodeName的值为特性的名称;nodeValue的值为特性的值;parentNode的值为null;在HTML中不支持子节点;在XHTML中子节点可以是Text或EntityReference

10、DOM操作技术

1)动态脚本:创建动态脚本的方式——插入外部文件和直接插入JavaScript代码;

插入外部文件:

function loadScript(url){

var script = document.createElement("script");

script.type = "text/javascript";

script.src = url;

document.body.appendChild(script);

}

直接插入JavaScript代码:

function loadScriptString(code){

var script = document.createElement("script");

script.type = "text/javascript";

try {

script.appendChild(document.createTextNode(code));

} catch (ex){

script.text = code;

}

document.body.appendChild(script);

}

2)动态样式:创建动态样式的方式——<link>元素包含来自外部的文件和<style>元素指定嵌入的样式;

<link>元素包含来自外部的文件:

function loadStyles(url){

var link = document.createElement("link");

link.rel = “stylesheet”;

link.type = "text/css";

link.href = url;

var head = document.getElementsByTagName("head")[0];

head.appendChild(link);

}

<style>元素指定嵌入的样式:

function loadStyleString(css){

var style = document.createElement("style");

style.type = "text/css";

try{

style.appendChild(document.createTextNode(css));

} catch (ex){

style.styleSheet.cssText = css;

}

var head = document.getElementsByTagName("head")[0];

head.appendChild(style);

}

3)操作表格

//创建表格

var table = document.createElement(“table”);

table.border = 1;

table.width = “100%”;

//创建tbody

var tbody = document.createElement(“tbody”);

table.appenChild(tbody);

//创建第一行

tbody.insertRow(0);

tbody.rows[0].insertCell(0);

tbody.rows[0].cells[0].appendChild(document.createTextNode(“cell 1,1”));

tbody.rows[0].insertCell(1);

tbody.rows[0].cells[1].appendChild(document.createTextNode(“cell 2,1”));

//创建第二行

tbody.insertRow(1);

tbody.rows[1].insertCell(0);

tbody.rows[1].cells[0].appendChild(document.createTextNode(“cell 1,2”));

tbody.rows[1].insertCell(1);

tbody.rows[1].cells[1].appendChild(document.createTextNode(“cell 2,2”));

//将表格添加到文档主体中

document.body.appendChild(table);

4)使用NodeList

第11章 DOM扩展

1、选择符API(Selectors API)

1)querySelector()方法:接收一个CSS选择符,返回与该模式匹配的第一个元素,如果没有找到匹配的元素,返回null

2)querySelectorAll()方法:接收一个CSS选择符,返回与该模式匹配的一个NodeList对象;要取得返回的NodeList对象中的每一个元素,可以使用item()方法,也可以使用方括号语法

3)matchesSelector()方法:接收一个CSS选择符,如果调用元素与该选择符匹配,返回true,否则返回false

2、元素遍历:Element Traversal API为DOM元素添加了5个属性

1)childElementCount:返回子元素(不包括文本节点和注释)的个数;

2)firstElementChild:指向第一个子元素;

3)lastElementChild:指向最后一个子元素;

4)previousElementSibling:指向前一个同辈元素;

5)nextElementSibling:指向后一个同辈元素;

3、HTML5

1)与类相关的扩充:

getElementsByClassName()方法接收一个参数——包含一或多个类名的字符串(类名的顺序无关),返回带有给定类的所有元素的NodeList对象;

classList属性添加、删除、替换类名,add(value)将给定的的字符串添加到列表中,如果存在就不添加;contain(value)表示列表中是否存在给定的值,如果存在返回true,否则返回false;remove(value)从列表中删除给定的字符串;toggle(value)如果列表中已经存在给定的值就删除它,如果列表中没有存在给定的值就添加它

2)焦点管理:

默认情况下,文档刚刚加载完成时,document.activeElement中保存的是document.body元素的引用;文档加载期间,document.activeElement的值为null;

document.hasFocus()方法用于确定文档是否获得了焦点

3)HTMLDocument的变化

document.readyState属性表示文档的加载状态,值为loading表示正在加载文档,值为complete表示已经加载完文档;

document.compatMode属性用于检测页面的兼容模式,值为CSS1Compat表示标准模式,值为BackCompat表示混杂模式;

document.head属性用于引用文档的<head>元素

4)字符集属性:document.charset自定义字符集;document.defaultCharset表示根据默认浏览器及操作系统的设置字符集

5)自定义数据属性:为元素提供与渲染无关的信息,或者提供语义信息;需要添加前缀data-;通过元素的dataset属性来访问自定义数据属性的值

6)插入标记:

innerHTML属性:在读模式下,innerHTML属性返回与调用元素的所有子节点(包括元素、注释和文本节点)对应的HTML标记;在写模式下,innerHTML属性会根据指定的值创建新的DOM树,然后用这个DOM树完全替换调用元素原先的所有子节点

outerHTML属性:在读模式下,innerHTML属性返回与调用元素本身及所有子节点(包括元素、注释和文本节点)对应的HTML标记;在写模式下,innerHTML属性会根据指定的值创建新的DOM树,然后用这个DOM树完全替换调用元素

insertAdjacentHTML()方法:接收两个参数——插入位置(beforebegin、afterbegin、beforeend、afterend)和要插入的HTML文本

4、专有扩展

时间: 2024-08-10 16:58:07

《JavaScript高级程序设计》第10-11章的相关文章

《JAVASCRIPT高级程序设计》第三章

<JAVASCRIPT高级程序设计>第三章主要讲述了这门语言的基础概念,内容多而浅,通过思维导图可以帮助我们很好的理清脉络. js函数使用function关键字来声明,以下是一个简单的例子: 1 function sayHi(name, message){ 2 alert("hello," +name + message); 3 } 函数中可以使用return语句指定返回值,如果只有“return;”,则函数在停止执行后,将返回undefined; 定义的函数有2个参数,那

《javascript高级程序设计》第五章知识点总结

第五章知识点总结 1.object类型 访问对象的方法:①点表示法        (people.name) :      ②方括号表示法         (people[name]). 常用方法:hasOwnProperty()         用于检查给定属性在当前对象实例中是否存在 isPrototypeOf()              用于检测传入的对象是否传入对象原型 toString()                        返回对象的字符串表示 valueOf()    

javascript高级程序设计 第十四章--表单脚本

javascript高级程序设计 第十四章--表单脚本 在HTML中表单由<form>元素表示,在js中表单对应的是HTMLFormElement类型,这个类型也有很多属性和方法:取得表单元素的引用还是为它添加id特性,用DOM操作来获取表单元素:提交表单:把<input>或<button>元素的type特性设置为"submit",图像按钮把<input>元素的type特性设置为"image",也可以调用submit(

《javascript高级程序设计》第六章总结

6.1 理解对象 属性类型 属性特性 行为描述 数据属性 Configurable 表示是否能通过delete删除属性从而重新定义属性. 数据属性 Enumerable 表示能否通过for-in循环返回属性.对于直接在对象中定义的属性,默认为true 数据属性 Writable 表示是否可以修改属性的值. 数据属性 value 表示这个属性的内部值. 访问器属性 Configurable 表示是否能通过delete删除属性从而重新定义属性. 访问器属性 Enumerable 表示能否通过for-

《javascript高级程序设计》第十三章知识点

第十三章知识点总结 1.事件流: ①事件冒泡:事件开始时由最具体的事件接受,逐级向上传播到较为不具体的节点. ②事件捕获:不太具体的节点更早的接受事件,最具体的节点应该最后接到事件. 事件流包括三个阶段:事件捕获阶段.处于目标阶段.事件冒泡阶段. 2.事件处理程序 3.事件对象 IE 属性 除了上面的鼠标/事件属性,IE 浏览器还支持下面的属性: 属性 描述 cancelBubble 如果事件句柄想阻止事件传播到包容对象,必须把该属性设为 true. fromElement 对于 mouseov

javascript 高级程序设计 学习笔记01章 javascript的认知

hello world: 大家早上好 ,所谓一年之计在于春,一日之计在于晨.今天开始学习 高级程序设计第三版 第二遍 以前以迅雷不及掩耳之势草草看过一遍 ,但是什么也没记住 已经忘得差不多了.哈哈,原来我不是黄蓉,也不是天才,还是那句话 好记性不如烂笔头.这次学习高级程序设计第三版 是有目标的,有目的性的.所以我会把 每一章学习的心得和笔记 都记录在此.于己于人都方便.废话不多说 ,开始吧 今天的第一张 ,javascript 的实现.张鑫旭大神说过 非it(计算机专业的)的前端从业人员 学习j

《JAVASCRIPT高级程序设计》第五章(1)

引用类型是一种将数据和功能组合到一起的数据结构,它与类相似,但是是不同的概念:ECMAScript虽然是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和结构等基本结构.引用类型也被称为“对象定义”. 一.Object类型 创建实例方式: 1使用new操作符+构造函数 1 var person = new Object(); 2 person.name = "Lillian"; 3 person.age = 29; 2使用对象字面量表示法 2.1属性不加引号 1 var pe

《JavaScript高级程序设计》第六章【面向对象的程序设计】 包括对象、创建对象、继承

一.理解对象 ECMAScript中有两种属性:数据属性和访问器属性. 二.创建对象 1. 工厂模式 使用简单的函数创建对象,为对象添加属性和方法,然后返回对象.这种方法后来被构造函数模式所取代. 2. 构造函数模式 可以创建自定义引用类型,可以像创建内置对象实例一样使用new操作符.但是它的每个成员都无法得到复用,包括函数. 但是这样说好像也不准确——如果是通过一个指针指向构造函数外部的函数的话,应该算是复用? 1 function Person(name,age){ 2 this.name

再看《JavaScript高级程序设计》第6-7章

第六章 面向对象的程序设计 1.理解对象:无序属性的集合,其属性可以包含基本值.对象或者函数 1)属性类型: 数据属性:4个特性——[[Configurable]]表示能否通过delete删除属性从而重新定义属性,能否删除属性的特性,或者能否把属性修改为访问器属性,这个特性默认值为true:[[Enumerable]]表示能否通过for-in循环返回属性,e这个特性默认值为true:[[Writable]]表示能否修改属性的值,这个特性默认值为true:[[Value]]包含这个属性的数据值,读