第十章 DOM

一 Node类型

共有12种节点类型,每个节点都有nodeType属性,用于表明节点类型,nodename 表示标签名称 nodeValue始终为null

1.操作节点

a)  appendChild()方法 用于向childNodes的列表最后添加节点,添加后相应的节点都会得到更新。如果出入到appendChild()中的节点已经是文档的一部分了,那结果就是将该节点从原来的位置移到新位子。

b) 如果要把节点放到childNodes列表中某个特定的位置,而不是末尾。可以使用insertBefore()方法。insertBefore()接受两个参数:要插入的节点和作为参照的节点。

如果参照为null则appsertBofore()和appendChild()执行相同的操作

如:插入到最后一个子节点之前

returnedNode=someNode.insertBefore(new,someNode.lastChild)

Alert(newNode==someNode.childNodes[someNode.childNodes.lenght-2]);   //ture

c) 替换节点

replaceChild()接受两个参数:要插入的节点和要替换的节点,返回的是要替换节点

如果只想要移除不想替换,只接受一个参数就是要删除的节点

d) cloneNode()用于克隆节点,用于创建调用这个方法的节点的一个完全相同的副本  接受一个布尔值为参数,当为ture是表示深度克隆 克隆除本身外和子节点的树,为false表示浅复制,复制节点本身。

  1. Document类型

虽然DOM标准规定document节点的子节点可以是documentType, ELement,ProcessingInstruction或comment,但还有两个内置的访问器子节点的快捷方式 Document.documentElement   //html

Document.body     //body

Document.title    //取得文档标题,也可以设置

属性:URL domain referrer

Url 表示包含页面完整的URL

Domain 包含页面的域名

Referrer 包含连接到当前页面的那个页面的URL

1.查找元素

getelementById()  取页面中命名为iD标签

getelementTagname()   取页面中的 某一类标签

GetelementsByName()   取得给定Name特性的标签

2.DOM一致性检测

Document.implementation属性就是用于检测DOM的一致性

DOM1只为Document.implementation规定了一个方法:

hasFeature()  此方法接受两个参数,要检测的DOM功能的名称及版本号

如:

var hasXmlDom=document.implementation.hasFeature(“XML”,”1.0”)

3.文档的写入

Write()

Writeln()

Open()

Close()

Write()和writeln()两个方法都是在页面加载完向页面写入文档不同的是writeln()在入完的后面会加一个</br>换行符。

2.Element类型

Element用于表现html和xml,提供了对元素的标签名 子节点特性的访问

要访问元素的标签名可以使用:nodeName属性和tagName属性  如果检测元素的标签名最好使用toLowerCase()方法把标签专为小写

a)html元素

所有的HTML类型都有HTMLElement表示HTMLElement直接继承Element并添加了一些属性,添加的这些属性分别对应每个HTML的特性

Id: 元素在文档中的唯一标识符

Title:有关元素的附加说明,一般通过工具提示条显示出来

Lang:元素内容的语言代码

Dir:语言的方向

className: 元素指定的css类

如:

<div id=”myDiv”  classs=”db”  title=”Body text” lang=”en” dir=”ltr”></div>

Var div=getElementById(“myDiv”)

Alert(div.id)   //myDiv

Alert(div.class)   //db

同时通过赋值的形式还可以修改其每个特性

b) 取得特性

每个元素都有一个或多个特性,这些特性的用途主要是给相应元素或内容的附加信息。操作特性的方法主要有

getAttribute()

setAttrivute()

removeAttribute()

如:

getAttribute()用法

Alert(div.getAttribute(“id”))    //myDiv

Alert(div.getAttribute(“class”))   //db

如上代码:使用此方法是需注意3点,取得class时直接传递class,而且无法取得style 和onclick的特性返回的是字符串。

setAttribute()接受两个参数,要设置的特性名和值。如果特性已经存在,则会替代已存在的值。如果不存在则设置相应的值。

removeAttribute() 彻底删除某个特性  除了删除特性值,也会完全删除特性

Attributes属性 Attributes属性中包含一个NamedNodeMap,与nodelist类似,也是一个动态的集合,NamedNodeMap对象具有以下方法

getNamedItem(name)   返回nodename属性等于namede的节点

removeNamedItem(name)  从列表中移除nadename等于namede的节点

setNamedItem(node)  向列表中添加节点,以节点nodename的属性的索引

Item(pos)  返回位于数字pos位置处的节点

Var id=element.attributes.getNamedItem(“id”).nodeValue

Var id=element.attributes.[“id”]nodeValue

Attributes属性由于不够方便一般很少使用,如果想要遍历元素特性,则可以使用Attributes

Function outputAttributes(element){

Var pairrs=new Array();

attrName,

attrValue,

i,

Len;

For(i=0,len=element.attributes.lenght;i<len;i++){

attName=elemet.attributes[i].nodeName;

attName=elemet.attributes[i].nodeValue;

Pairs.push(attrName+”=\”+attrValue+”\””)

}

Return paors.join(“ ”)

}

创建元素 document.createElement()方法可以创建新元素,接受一个参数,就是要创建元素的标签名。

Var div=document.createElement(“div”)创建一个div标签

可以使用appendchild()等方法把创建的标签插入到文档树里,同时还可以为标签添加特性

在IE中还可以以另一种形式使用createElement()方法,即可以传入完整的元素标签,也可以包含属性。

Var div=document.createElement(“<div id=\”myNewDiv\”  class=\”box\”></div>”) 这种方法有助于避开IE7及更早版本中动态创建元素的某些问题。

创建子节点

childNodes包含他所有的子节点 访问时须检查nodetype

3.Text类型

Nodetype的值为3

nodeName的值为#text

nodeValue的值为节点所包含的文本

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

appendDate(text) 将text添加到节点的末尾

deleteData(offset,count)从offset的指定位置开始删除count个字符

insertData(offset,text)从offset指定位置插入text

replaceData(offset,count,text) 用text替换从offset指定位置开始到offset+count为止处的文本

splitText(offst) 从offset指定的位置将当前文本节点分成两个文本节点

substringData(offset,count) 提取从offset指定的位置开始到offset+count为止处的字符串

Lenght:保存着文本节点中字符的数目。

1.创建文本节点

Document.createTextNode()创建新文本节点接受一个参数——要插入节点中的文本

2.合并文本节点

Normalize()如果在包含一个或多个人本节点的父元素上调用此方法,将会把 所有文本节点合并成一个,

3.分割人本节点splitText()按照指定位置把一个文本节点分割成两个,接受一个参数:要分割的索引号

4.Comment 和CDATASection 类型

注释在DOM中是通过Comment 类型表示的,

CDATASection类型针对于Xml文档

他们拥有除splitText()之外的所有字符串操作方法。

5.DocumentFragment类型

所有节点类型中只有DocumentFragment在文档中没有对的标记,dom规定DocumentFragment是“轻量级”文档,可以包含element processingInstruction, comment  txet CDATASection等

6.attr类型

元素的特性在DOM中以attr类型表示

Attr 对象有三个属性:name  value  specified

Name 相当于nodename

Value  相当于nodeValue

Specified  布尔值 用于区别特性是代码中指定的还是默认的

Document.createAttribute()传入特性的名称可以创建新的特性节点

如:

为元素添加特性align

Var attr=document.createAttribute(“align”)

attr.value=”left”;

element.setAttrributeNode(attr);

Alert(element.attributes[“align”].value) // left

Alert(element.getAttrributeNode(“align”).value) //left

创建动态脚本

创建动态样式

操作表单

第十一章 DOM扩展

  1. 选择符API

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

querySelectorAll()方法接收的参数也是css选择符,返回的是与之匹配的所有元素,

matcheSelector()方法接收一个参数css选择符,如果调用的元素与该选择符匹配,返回ture.

  1. 元素遍历

对于元素间的空格,ie9之前版本不会返回文本节点。从而导致childNodes和firstChild等属性的行为不一致。因此新定义一组属性

childElementCount:返回子元素的个数

firstElementChild:指向第一个子元素

lastElementChild:指向最后一个子元素

previousElementSibling:指向前一个同辈元素

nextElementSibling:指向后一个同辈元素

  1. classlist属性

在操作类名时,通过className属性添加、删除、和替换类名

<div class=”db user disabled”> </div>

要删除used

//首先,取得类名字符串并拆分数组

Var classNames=div.calssName.Split(/\s+/);

//找到要删除的类名

Var pos=-1;

i,

Len;

For(i=0,len=className.lenght;i<len;i++){

If(className[i]==”usar”){

Pos=1;’

Breack;

}

}

//删除类名

className.splice(i,1);

//把剩下的类名拼成字符串并重新设置

div.className=classnames.join(“ “)

Html5 新加的方法

Add(value):将给定的字符串值添加到列表中 如果值已存在就不添加

Contains(value)表示列表中是否存在给定的值,如果存在则返回ture

Remove(value) 从列表中删除给定的字符串

Toggle(value):如果列表中存在给定的值,删除,如果不存在就添加

如:div.Classlist.remove(“user”)

Html5 焦点管理

Document.activeElement属性,该属性始终引用DOM中当前获得了焦点的元素。

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

  1. HTMLDocu的变化

1.readyState属性

Document的readyState属性有两个可能的值

Loading,正在加载的文档

Comolete, 已经加载完的文档

用法就是可以和onload事件处理程序一起使用,用以提醒某文档是否加载完

Head属性 引用文档的head元素

Charset属性  表示文本中实际使用的字符集  “UTF-16”

Dataset属性 访问自定义属性的值

5.插入标签

innerHTML属性

返回的是与调用元素的所有子节点(包括元素,注释,文本节点)

Outerhtml属性返回调用他的元素以及所有子节点的HTML标签。

Div.outerhtml=”<p>This is a paragraph</p>”   向div里插入标签

insertAdjacentHTML()方法接受两个参数:插入的位置和插入的html文本

第一个参数是下列值之一

beforebegin:当前元素之前插入一个紧邻的同辈元素

afterbegin:当前元素之下插入一个新的子元素或在第一个子元素之前在插入新的子元素

beforeend:当前元素之下插入一个新的子元素或在最后一子元素之后在插入新的子元素

Afterend:在当前元素之后插入一个紧邻的同辈元素。

第二个参数是类似<p>This is a paragraph</p>的HTML标签

6.scrollintoView()方法

可以再所有的HTML中调用,通过滚动浏览器或某个容器元素调用元素就可以出现在视口中,如果传入ture作为参数,或不传参数,那么窗口滚动之后会让调用元素的顶部与视口顶部平齐。如果传入falae,调用元素会尽可能全部出现在视口,

7.插入文本

innerText属性  返回元素中包含的所有文本内容,包括子节点树中的文本,读取时会由浅入深的顺序将文档中所有文本拼接起来

outerText属性 ,作用范围扩大到包含调用他的节点之外,基本和innerText没有区别

第十二章 DOM2和DOM3

  1. 访问元素的样式

Style属性,对于有短划线的CSS属性,必须将其转换为驼峰大小写形式。

  1. DOM样式的属性和方法

在DOM2中还为style对象定义了一些属性和方法,这些属性和方法在提供元素的style特性值的同时,也可以修改样式

cssText:通过他可以访问到style特性中的css代码

Lenght: 应用给元素的css数量

parentRule: 表示css信息的CSSRule对象,

getPropertyCSSValue(propertyName):返回包含给定属性值得cssValue对象

getPropertyPriority(propertyName):如果给定的属性使用了!Important设置,则返回,否则,返回null

getPropertyValue(propertyName)返回给定属性的字符串的值,

Item(index):返回给定位置的CSS属性的值

RemoveProperty(propertyName)从样式中移除给定的属性

3计算样式

DOM2增强了document.defaultView,提供了getComputedStyle()方法,该方法接受两个参数,要去的计算样式的元素和一个为元素字符串(可以为null),返回的是计算元素设置的值,如:

<style>

Background:red;

Width:300px;

Height:300px;

Border:1px solid red;

</style>

var myDiv=document.getElementById(“myDiv”)

Var computedStyle=document.defaultView.getComputedStyle(myDiv,null)

Alret(computedStyle.backgroungColor)  //red

Alert(computedStyle.width)     //300px

Alert(computedStyle.border)    //在某些浏览器中 1px solid red

在ie中不支持此方法,使用的是currentStyle属性

Var computedStyle=myDiv.currentStyle

Alret(computedStyle.backgroungColor)  //red

Alert(computedStyle.width)     //300px

Alert(computedStyle.border)    //undefined

注意:计算的样式都是只读的,计算后的样式也包括默认的样式

4.操作样式表

cssStyleSheet类型表示的是样式表。继承自StyelSheet,继承而来的属性如下:

Type: 表示样式表类型的字符串,在CSS中,字符串是type/css

cssRules:样式表中包含的样式规则的集合  ie不支持

deleteRules(index):删除CSSRules集合中指定位置的规则(样式) ie不支持

insertRules(rule,index): 向cssRules中指定的位置插入rule字符串, ie不支持但是有个addRule()方法

5.css规则

CSSRule对象表示样式表中的每一条规则,CSSRule是一个共其他多种类型继承的基类,最常见的是CSSStyleRule类型,其包含以下属性:

cssText: 返回整条规则对应的 文本  ie 不支持

parentRule: 如果当前规则是导入规则,这个属性应用的就是导入规则。或者这个值为null,

parentStyleSheet:当前规则所属的样式表

selectorText: 返回当前规则的选择符文本

Style:可以通过他设置和取得规则中的特定的样式值

Div.box{

Background:red;

Width:300px;

Height:300px;

Border:1px solid red;

}

假如这条规则位于页面中的第一个样式表中,而且这样式表中只有这一个样式规则,那么通过以下代码可以取得这条规则的各种信息,

Var sheet=doucment.styleSheets[0];

Var rules=sheet.cssRules|| sheet.reles

Var rule=rules[0];

Alert(rule.selectorText)   //divbox

Alert(rule.style.cssText)   //完整的css代码

Alert(backgroundColor)   //red

..........

创建规则:

Dom规定 要想向现有样式中添加新规则,需要使用 insertRule()方法:接受两个参数

规则文本和表示在哪里插入规则的索引

如:

sheet.insertRule(“body { mso-char-indent-count:0.0000; ">Ie不支持这个方法  ie8及更早版本使用addRule()

sheet.addRule(“body” ,” mso-para-margin-left:0.0000gd; text-indent:21.0000pt; mso-char-indent-count:0.0000; ">移除规则

Sheet.deleteEule()

对于IE浏览器使用

sheet.removeRule()  使用方法相同

6.元素的大小

偏移量:

offsetHeight:元素在垂直方向占用的空间包括元素的高度,水平滚动条的高度,上边框及下边框的高度

offsetWidth:元素在水平方向上占用的空间大小,包括元素高度,垂直滚动条宽度,左右边框宽度

offsetLeft:元素的左边框到包含元素的左边框之间的距离

offsetRight:元素的右边框到包含元素的右边框的距离

客户区大小:

clientWidth:内容+左右内边距

clientHeight:内容+上下内边距

滚动大小:

scrollHeight: 在没有滚动条的情况下,元素内容的总高度

scrollWidth:  在没有滚动条的情况下,元素内容的总宽度

scrollLeft:被隐藏在内容区域左侧的距离,设置这个属性可以改变元素的滚动位置

scrollTop:被隐藏在内容区域上方的距离,设置这个属性可以改变元素的滚动位置

第10章DOM笔记的更多相关文章

  1. Javascript高级程序设计读书笔记(第10章 DOM)

    第10章 DOM 10.1  节点层次 每个节点都有一个nodeType属性,用于表明节点的类型.任何节点类型必是下面中的一个: Node.Element_NODE(1); NODE.ATTRIBUT ...

  2. 第10章 DOM

    第10章 DOM 10.1 节点层次 10.1.1 Node 类型 10.1.2 Document 类型 10.1.3 Element 类型 10.1.4 Text 类型 10.1.5 Comment ...

  3. C#高级编程(第9版) 第10章 集合 笔记

    话说 虽然敲过好多代码, 但除了C++,一直没正眼瞧过其它语言.(没办法 谁叫C++既有oop又能自由控制内存呢) 今天 看公司老项目的src,c#的,linq+Dictionary的用法有感.所以找 ...

  4. MySQL必知必会 前10章学习笔记

    1. 在使用用户名和密码登陆MySQL数据库之后,首先需要指定你将要操作的数据库 USE $数据库名称 2. 使用SHOW 命令可以查看数据库和表中的信息 SHOW DATABASES; #列出可用数 ...

  5. 《构建之法》第8、9、10章读书笔记、读后感以及Sprint1总结

    第八章:需求分析 软件需求 人们(用户)的需求五花八门,作为一个软件团队要准确而全面地获取这些需求主要有以下四个步骤: 获取和引导需求.这一步骤也被叫做“需求捕捉”.软件团队需要为用户着想,设身处地, ...

  6. 《构建之法》第8、9、10章 读书笔记和Sprint总结

    第八章:需求分析 这章主要解析了需求的多面方面,不同的项目需要不同的手段,真正的需求稍纵即逝,需要靠火眼金睛和敏捷的身手来发现并抓住它们.另外,很多时候用户并不知道自己确切的需求,或者不愿意表达完整的 ...

  7. javascript高级程序设计第3版——第10章 DOM

    第十章,DOM DOM是语言中立的API,用于访问和操作HTML 和XML 文档.DOM1 级将HTML 和XML 文档形象地看作一个层次化的节点树,可以使用JavaScript 来操作这个节点树,进 ...

  8. javascript——10章 DOM

    1.节点关系 (1)childNodes:返回节点的子节点集合 返回值:NodeList 对象,表示节点集合. 注:childNodes只能取到子级,不能取到子级的子级. childNodes所有节点 ...

  9. JavaScript高级程序设计(第三版)学习笔记8、9、10章

    第8章,BOM BOM的核心对象是window,具有双重角色,既是js访问浏览器的一个接口,又是ECMAScript规定的Global对象.因此,在全局作用域中声明的函数.变量都会变成window对象 ...

随机推荐

  1. lnmp下安装ffmpeg和ffmpeg-php教程

    现在我将我的过程方法发布出来. 以下都是用SSH命令 一.安装ffmpeg 操作系统:centos6 安装ffmpeg有两种方式:①.用源码包安装,这个不知道怎么回事老是报错②用yum命令安装,cen ...

  2. Python自动化运维之8、正则表达式re模块

    re模块 正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串,在文本处理方面功能非常强大,也经常用作爬虫,来爬取特定内容,Python本身不支持正则,但是通过导入re模块,Python ...

  3. 隐藏NGINX服务器名称 和版本号

    隐藏NGINX服务器名称: 修改或隐藏服务器名称需要修改源码nginx.h,nginx.h在src/core/目录下 .具体操作如下: 把下面两个宏的值修改为自己设定的值,例如"NGX&qu ...

  4. ssh 文件传输

    在linux下一般用scp这个命令来通过ssh传输文件. 1.从服务器上下载文件scp username@servername:/path/filename /var/www/local_dir(本地 ...

  5. eclips常用快捷键

    本文取自:Eclipse中常用快捷键 - yizhang88的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/yizhang88/article/details/2 ...

  6. HTTP缓存机制[译文]

    本文翻译自: https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching ,主要用于个人记录和共享,若有疏漏错误,请不吝指正,谢谢! 通过重用已 ...

  7. IBM Cognos 10 启动报错

    报错信息: 15:35:02, 'LogService', 'StartService', 'Success'. 15:35:03, CAF input validation enabled. 15: ...

  8. Android输入法界面管理(打开/关闭/状态获取)

    最近做一个带发表情的聊天界面,需要管理系统输入法的状态, 一.打开输入法窗口: InputMethodManager inputMethodManager = (InputMethodManager) ...

  9. cf298F:状压dp+剪枝

    div2的F题,只想到了一个复杂度略高的dp,T了几次,后来加了剪枝减掉一些无用的状态终于过了.. 题意: 一个n*m的矩阵 (n<=5,m<=20),对格子进行黑白染色,已经给出了每行每 ...

  10. Palindrome Pairs 解答

    Question Given a list of unique words, find all pairs of distinct indices (i, j) in the given list, ...