1. DOM

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

1.1 节点层次

DOM可以将任何HTML和XML文档描绘成一个由多层节点构成的结构。节点分为几种不同的类型,每种类型分别表示文档中不同的信息及标记。

1.1.1 Node类型

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

每个节点都有一个nodeType属性,因此所有节点类型都共享着相同的基本属性和方法

每个节点都有一个nodeType属性,用于表明节点的类型,节点类型由在Node类型中定义的下列12个数值常量来表示,任何节点类型比居其一:

l Node.ELEMENT_NODE(1);

l Node.ATTRIBUTE_NODE(2);

l Node.TEXT_NODE(3)

l Node.CDATA_SECTION_NODE(4)

l Node.ENTITY_REFERENCE_NODE(5)

l Node.ENTITY_NODE(6)

l Node.PROCESSING_INSTRUCTION_NODE(7)

l Node.COMMENT_NODE(8)

l Node.DOCUMENT_NODE(9)

l Node.DOCUMENT_TYPE_NODE(10)

l Node.DOCUMENT_FRAGMENT_NDOE(11)

l Node.NOTATION_NODE(12)

(1). 判断节点类型

if(someNode.nodeType == 1){

}

适用所有浏览器

(2). nodeName 和 nodeValue,可以了解具体信息,这两个属性取决于属性类型

(3). 节点关系:

  1. childNodes对象,NodeList是一种类数组对象,用于保存一组有序的节点,可以通过位置来访问这些节点
  2. parentNode属性,该属性指向文档树中的父节点
  3. previousSibling:前面的兄弟节点
  4. newSibling:后面的兄弟节点
  5. firstChild:第一个子节点
  6. lastChild:最后一个子节点
  7. ownerDocument,该属性指向表示整个文档的文档节点

(4). appendChild():在节点的末尾添加一个节点

hasChildNodes():是否有子节点

insertBefore():在前面插入节点

replaceChild():替换节点

removeChild():移除节点

cloneNode():复制节点

1.1.2 Document类型

l nodeType的值为9

l nodeName的值为 “#document”

l nodeValue的值为null

l parentNode的值为null

l ownerDocument的值为null

l 其子节点可能是一个DocumentType(最多一个),Element(最多一个),ProcessingInstruction或者Comment

常见属性:

document.body

document.title

document.URL

document.domain

document.referrer

document.getElementById()

document.getElementsByTagName()

document.anchors

document.applets

document.forms

document.images

document.links

1.1.3 Element类型

l nodeType的值为1

l nodeName的值为 元素的签名值

l nodeValue的值为null

l parentNode的值为Document或Element

l 子节点可能是Element,Text,Comment,ProcessingInstruction,CDATASection或者EntityReference

一般会存在下列属性:

id,title,lang,dir,className

<div id="id" title="title" lang="lang" dir="dir" class="className"></div>

可以使用getAttribute(),setAttribute()和removeAttribute()来操作属性

Element类型是使用attributes属性的的唯一一个DOM节点类型,表示所有的属性集合。

1.1.4 Text类型

l nodeType的值为3

l nodeName的值为 “#text”

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

l parentNode的值为Element

l 没有子节点

l 可以通过nodeValue属性或data属性访问Text节点中的文本

l appendData(text)

l deleteData(offset,count)

l insertData(offset,text)

l replaceData(offset,count,text)

l splitText(offset)

l substringData(offset,count)

1.1.5 Comment

l nodeType的值为8

l nodeName的值为 “#comment”

l nodeValue的值为 注释的内容

l parentNode的值为Element或者Document

l 没有子节点

1.1.6 CDATASection

l nodeType的值为4

l nodeName的值为 “#cdata-section”

l nodeValue的值为 CDATA区域中包含的内容

l parentNode的值为Element或者Document

l 没有子节点

1.1.7 DocumentType

l nodeType的值为10

l nodeName的值为 doctype的名称

l nodeValue的值为 null

l parentNode的值为Document

l 没有子节点

1.1.8 DocumentFragment

l nodeType的值为11

l nodeName的值为 ‘#document-fragment’

l nodeValue的值为null

l parentNode的值为null

l 子节点可能是Element,Text,Comment,ProcessingInstruction,CDATASection或者EntityReference

1.1.9 Attr类型

l nodeType的值为2

l nodeName的值为 特性的名称

l nodeValue的值为特性的值

l parentNode的值为null

l 没有子节点

1.2 DOM操作技术

1.2.1 动态脚本

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

script.type = "text/javascript";

script.sec = "io.js";

document.body.appendChild(script);

1.2.2 动态样式

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

link.rel = "stylesheet";

link.type = "text/css";

link.href = "io.css";

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

head.appendChild(link);

1.2.3 操作表格

<table>属性和方法

l caption

l tBodies

l tFoot

l tHead

l rows

l createTHead()

l createTFoot()

l createCaption()

l deleteTHead()

l deleteTFoot()

l deleteCaption()

l deleteRow(pos)

l insertRow(pos)

<tbody>属性和方法

l rows

l deleteRow(pos)

l insertRow(pos)

<tr>属性和方法

l cells

l deleteCell(pos)

l insertCell()pos

1.2.4 使用NodeList

由于NodeList是动态的,在迭代NodeList时,使用length属性初始化第二个变量,然后将迭代器与该变量比较

10. javacript高级程序设计-DOM的更多相关文章

  1. 11. javacript高级程序设计-DOM扩展

    1. DOM扩展 1.1 选择符API l querySelector() 接收一个css选择符,返回与该模式匹配的第一个元素 l querySelectorAll() 接收一个css选择符,返回所有 ...

  2. 2020/6/11 JavaScript高级程序设计 DOM

    DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序接口).他描绘了一个层次化的节点树,允许开发人员添加.移除和修改页面的某一部分. 10.1 节点层次 DOM将任何HTML和XML ...

  3. javascript高级程序设计---DOM

    DOM是文档对象模型的简称,DOM的基本思想是把结构化文档解析成一系列的节点,由这些节点组成数装的DOM树,所有的这些节点和最终的树状结构都有统一的对外接口,达到使用编程语言操作文档的目的,DOM可以 ...

  4. 24. javacript高级程序设计-最佳实践

    1. 最佳实践 l 来自其他语言的代码约定可以用于决定何时进行注释,以及如何进行缩进,不过JavaScript需要针对其松散类型的性质创造一些特殊的约定 l javascript应该定义行为,html ...

  5. 21. javacript高级程序设计-Ajax与Comet

    1. Ajax与Comet 1.1 XMLHttpRequest对象 IE5是第一款引入XHR对象的浏览器,IE5中是通过MSXML库中的一个ActiveX对象实现的.因此在IE中可能存在MSXML2 ...

  6. 19. javacript高级程序设计-E4X

    1. E4X E4X是对ECMAScript的一个扩展, l 与DOM不同,E4X只用一个类型节点来表示XML中的各个节点 l XML对象中封装了对所有节点都有用的数据和行为.为了表示多个节点的集合, ...

  7. 18. javacript高级程序设计-JavaScript与XML

    1. JavaScript与XML IE采取了下列方式: l 通过ActiveX对象来支持处理XML,而相同的对象也可以用来构建桌面应用程序 l Windows携带了MSXML库,JavaScript ...

  8. 13. javacript高级程序设计-事件

    1. 事件 1.1 事件流 事件流描述的是从页面中接受事件的顺序,IE的事件是冒泡流,而Netscape Communicator的事件流是事件捕捉流. 1.1.1 事件冒泡 <!DOCTYPE ...

  9. 12. javacript高级程序设计-DOM2和DOM3

    1. DOM2和DOM3 DOM2级规范定义了一些模块,用于增强DOM1级.“DOM2级核心”为不同的DOM类型引入了一些与XML命名空间有关的方法,这些变化只在使用XML或者XHTML,对于HTML ...

随机推荐

  1. 软件安装失败,导致ubuntu软件中心软件消失

    感谢百度上各位IT界朋友的帮助,由于某个软件安装失败,导致ubuntu软件中心软件消失的解决办法: 找百度,有人说, 使用命令:sudo apt-get install software-center ...

  2. hdu5033 Building (单调栈+)

    http://acm.hdu.edu.cn/showproblem.php?pid=5033 2014 ACM/ICPC Asia Regional Beijing Online B 1002 Bui ...

  3. HDU4930 Fighting the Landlords 模拟

    Fighting the Landlords Fighting the Landlords Time Limit: 2000/1000 MS (Java/Others)    Memory Limit ...

  4. 预处理prepareStatement是怎么防止sql注入漏洞的?

    序,目前在对数据库进行操作之前,使用prepareStatement预编译,然后再根据通配符进行数据填值,是比较常见的做法,好处是提高执行效率,而且保证排除SQL注入漏洞. 一.prepareStat ...

  5. 装X之写博客

    博客作用: 为了温习以前的知识,记录下 前几天和一个前辈聊天,说起看书总是前面学後面忘点的事情· 写个博客试试?

  6. Spring、Spring MVC、MyBatis整合文件配置详解

    原文  http://www.cnblogs.com/wxisme/p/4924561.html 主题 MVC模式MyBatisSpring MVC 使用SSM框架做了几个小项目了,感觉还不错是时候总 ...

  7. Eclipse 自动补全功能失效解决办法及修改快捷键方法

    最近在学习Java,前段时间分盘把电脑能坏了,重装系统后发现我的Eclipse的自动补全的功能失效了,那多麻烦呀,什么都得自己打,于是百度后总结了以下解决方法: 1.点击Window-->Pre ...

  8. linux命令行netstat总结

    1.所谓的监听就是某个服务程序会一直常驻在内存中,所以该程序启动的Port就会一直存在. 2.在小于1023的端口,都是需要以root身份才能够启动的. 3.大于1024以上的Port主要是作为cli ...

  9. PHP拦截器之__set()与__get()的理解与使用

    “一般来说,总是把类的属性定义为private,这更符合现实的逻辑.但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数“__get()”和“__set()”来获取和赋值其属性 ...

  10. QT编写上位机程序一定要初始化变量以及谨慎操作指针

    背景: 在编写QT上位机界面时,界面在运行的时候经常出现卡死或者直接挂掉的怪现象. 正文: 上位机有个函数为check_receive():该函数的作用为定时调用循环检测USB是否有数据.若有,则将信 ...