DOM(文档对象模型),描述了一个层次化的节点树

一、DOM NODE相关公共属性与方法

DOM中所有节点都实现了NODE接口,该接口的公共属性和方法如下:

1.节点基本属性

1)NodeType 节点类型,利用12个数值来表示。常见的有:1代表元素节点,2代表属性节点,3代表文本节点,8代表注释节点,9代表document,11代表iframe

2) NodeName与NodeValue 这两个属性的值完全取决于特定的节点类型.例:如果是元素节点,那么nodeName的值为元素的标签名,nodeValue为null.

2.节点关系相关属性

I.childNodes属性,返回一个NodeList对象,这是一个有生命,会呼吸的对象,能够实时,动态的反映节点结构。具有length属性,也可以利用方括号或者item()访问其中的节点。

II,parentNode属性,previousSibling属性,nextSibling属性,firstChild属性,lastChild属性。

IV,ownerDocument属性,该属性指向整个文档的文档节点Document.

如果想要的知识元素节点,那么对应的属性如下:

childNodes  children

firstChild  firstElementChild

lastChild   lastElementChild

previousSibling  previousElementSibling

nextSibling  nextElementSibling

childNodes.length  childElementCount

3.操作节点相关方法

hasChildNodes()方法

1)appendChild()  父节点调用,返回新增的节点;如果新增的节点已经是文档的一部分了,那么实现效果实际上是节点的移动,结果就是该节点从原来位置转移到新位置。

2)insertBefore()  父节点调用,接收两个参数。要插入的节点和作为参照的节点。

3)replaceChild()  父节点调用,接收两个参数,要插入的节点和要替换的节点。

4)removeChild()   父节点调用  

5)cloneNode()    复制节点,如果要深复制,传入参数true,注意该节点不会复制节点的javascript属性,如事件处理程序等。

6)normalize(),其 作用在于处理文档树中相邻的文本节点

4,查找节点的相关方法

1)document.getElementById() 返回元素,

2)[document|parentNode].getElementsByTagsName() 返回NodeList,其他同上

3)document.getElementsByName() 查找单选按钮等的时候很有用

4)DOM扩展:document.querySelector();参数为css选择符,返回查找到的第一个元素

5)DOM扩展:document.querySelectorAll();参数为css选择符,返回查找到的所有元素

5,补充

虽然DOM为操作节点提供了丰富的方法,但是在需要给文档插入大量新html标记的情况下,通过DOM仍然非常麻烦,因为不仅要创建一系列的DOM节点,还要小心地按照正确的顺序插入,同时性能也不高。因此DOM扩展中定义了一下属性:

1.innerHTML属性  在读模式下,innerHTML返回与调用元素的所有子节点对应的html标记。在写模式下,innerHTML会根据制定的值创建新的DOM树,然后用这个DOM树替换掉原来元素的所有子节点。

2)outerHTML属性  在读模式下,outerHTML返回与调用元素的所有子节点对应的html标记。在写模式下,outerHTML会根据制定的值创建新的DOM树,然后用这个DOM树完全替换掉原来元素。

注意的是,为了提高内存和性能,在使用innerHTML,outterHTML属性时候,最好手工删除要被替换元素的所有事件处理程序和JavaScript对象属性。

二、document节点类型

其nodeType为9,nodeName为document,nodeValue为null

1.特有属性

1)document.docType属性,指向DocumentType子节点

2)document.documentElement属性,指向html元素

3)document.body属性,指向body元素

4)document.title属性,指向文档标题

5)document.url/domain/referer属性,url包含页面完整URL,domain包含页面域名,referer保存者链接到当前页面的前一个页面的链接(这些特性其实都存在于html头部中)

6)document.forms  可以获得页面所有的form元素

7)document.images  可以获得页面所有的images元素

8)document.anchors  可以获得页面所有带有name属性的<a>元素

9)document.links  可以获得页面所有带有href属性的<a>元素

10)document.compatMode='CSS1Compat' 标准模式下,'BackCompat' 混杂模式。这与meta中的定义有关。

2,特有方法

2)write(),writeln()用于页面的输出流;

3)open(),close()用于打开和关闭输出流,如果是在页面加载期间使用write(),writeln(),则不需要用到上述两个方法

4)createElement()方法 创建element类型的节点

5)createTextNode()方法,创建Text类型的节点,接受一个参数,(用得不多,完全可以使用innerHTML搞定)

6)createAttributeNode()方法,创建特性节点(用得不多,完全可以使用setAttribute/getAttribute搞定)

三、Elemment类型

nodeType值为1,nodeName为标签名,nodeValue为null

1,特有属性

1)tagName属性 和 nodeName的返回值相同

2)id属性

3)title属性

4)className属性

5)attributes 除非要遍历元素的所有attribute,否则这个属性用的不多

6)style属性,如style.backGround 等,注意的是,这只能获取html代码中内嵌的样式,对于<style>标签中设置的样式,以及外联样式表中的样式,是没有办法获取的。

2,特有方法

1)getAttribute(),setAttribute()和removeAttribute()

四、Text类型

NodeType为3,NodeName为#text,nodeValue为节点所包含的文本,

1)data属性,和nodeValue的返回值相同。可以通过appendData(),deleteData(),insertData(offset,text),replaceData(offset,count,text),substringData(offset,count)等方法进行操作

2)length属性,返回文本中字符数目

3)要访问Element元素中的文本,利用

div.firstChild.data来访问。或者div.childNodes[0].nodeValue来访问。不过很多情况下都使用父节点的innerHTML属性

四、documentFragment类型

NodeType为11,NodeName为#document-fragment,nodeValue为null

documentFragment可以作为一个仓库使用,防止频繁的利用javascript进行dom操作,来提高性能。

var fragment=document.createDocumentFragment();
var ul=document.getElementById('list');
var li=null;
for(var i=;i<;i++){
li=document.createElement('li');
li.innerHTML='item'+i;
fragment.appendChild(li);
}
ul.appenChild(fragment);

五、操作表格

除了使用innerHTML之外,操作表格还有一些相对简单的API,如下:

var table=document.createElement('table');
var tbody=document.createElement('tbody');
tabel.appendChild(tbody);
tbody.insertRow();
tbody.rows[].insertCell();
tbody.rows[].cells[].innerHTML='cell1';

六:元素滚动

元素节点都可以调用的关于滚动的方法有:

scrollIntoViewIfNeeded(alignCenter):当前元素在视口不可见的时候,滚动浏览器窗口或者容器元素,让它可见。如果已经可见,那么什么都不做。alignCenter若为true,则尽量让元素显示在视口中央。

scrollByLines(lineCount):将元素内容滚动指定的行高

scrollByPages(pageCount):将元素滚动指定的页面高度

javascript学习笔记之DOM的更多相关文章

  1. javascript学习笔记之DOM与表单

    DOM(文档对象模型),猫叔了一个层次化的节点树 一.DOM NODE相关公共属性与方法 DOM中所有节点都实现了NODE接口,该接口的公共属性和方法如下: 1.节点基本属性 1)NodeType 节 ...

  2. JavaScript 学习笔记-HTML&&DOM

    HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被构造为对象的树. JavaScript 能够 ...

  3. JavaScript学习笔记之DOM介绍

    目录 1.简介 2.方法 3.属性 4.访问节点 5.修改节点 6.添加节点 7.删除节点 8.替换节点 9.改变 CSS 1.简介 文档对象模型(Document Object Model,DOM) ...

  4. JavaScript学习笔记之DOM对象

    目录 1.Document 2.Element 3.Attribute 4.Event 1.Document 每个载入浏览器的 HTML 文档都会成为 Document 对象,Document 对象允 ...

  5. Javascript学习笔记三——操作DOM(二)

    Javascript学习笔记 在我的上一个博客讲了对于DOM的基本操作内容,这篇继续巩固一下对于DOM的更新,插入和删除的操作. 对于HTML解析的DOM树来说,我们肯定会时不时对其进行一些更改,在原 ...

  6. Javascript学习笔记二——操作DOM

    Javascript学习笔记 DOM操作: 一.GetElementById() ID在HTML是唯一的,getElementById()可以定位唯一的一个DOM节点 二.querySelector( ...

  7. Java程序猿的JavaScript学习笔记(8——jQuery选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  8. Java程序猿JavaScript学习笔记(2——复制和继承财产)

    计划和完成在这个例子中,音符的以下序列: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaSc ...

  9. Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

随机推荐

  1. Css几个兼容性问题

    1.BUG_fireFox!!!一个容器内的子容器如果要左右浮动的话,需要在这个容器设置上样式:"overflow:hidden". 注:内部元素浮动就会导致外面的容器的高度在fi ...

  2. Binding的简单使用

    Binding可以看作是数据的桥梁,两端分别为Source和Target,一般情况,Source是逻辑层的对象,Target是UI层的控件对象,可以将数据从逻辑层送往UI层展现 简单的例子: clas ...

  3. python:set() 函数

    描述 Python 内置函数 创建一个无序不重复元素集 可进行关系测试,删除重复数据 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetr ...

  4. 一款完美代替微信小程序原生客服消息的工具:

    一.设置:无需开发,多种回复(自动+人工)   自动回复形式有3种: 打开客服消息(用户只要和客服互动过一次,再次点击进入,会收到设置好的自动回复) 关键词回复(用户在小程序中回复某个关键词内容时,会 ...

  5. access数据库根据指定日期进行查询

    获取指定日期的记录 1.select Field1 from  A  where format("yyyy-MM-dd",Field1)=#2011-10-07# 有时不能获取记录 ...

  6. TensorFlow入门——bazel编译(带GPU)

    这一系列基本上是属于我自己进行到了那个步骤就做到那个步骤的 由于新装了GPU (GTX750ti)和CUDA9.0.CUDNN7.1版本的软件,所以希望TensorFlow能在GPU上运行,也算上补上 ...

  7. Nginx的快速安装

    1. 准备工作 1. CenterOS7.x.vmware虚拟机,安装过程参考 https://jingyan.baidu.com/article/eae0782787b4c01fec548535.h ...

  8. linux下mysql忘记密码解决方案

    一.写随笔的原因:之前自己服务器上的mysql很久不用了,忘记了密码,所以写一下解决方案,以供以后参考 二.具体的内容: 1. 检查mysql服务是否启动,如果启动,关闭mysql服务 运行命令:ps ...

  9. Delphi 变量的作用域

  10. 基于 Debian 的 Netrunner 19.08 “Indigo” 发布

    Netrunner 19.08版本被称为“Indigo”,基于最近发布的Debian GNU/Linux 10 “Buster”操作系统系列,具有KDE Plasma 5.14.5桌面环境,并附带KD ...