• DOM 是 JavaScript 操作网页的接口,全称为“文档对象模型”(Document Object Model)。它的作用是将网页转为一个 JavaScript 对象,从而可以用脚本进行各种操作
  • 浏览器会根据 DOM 模型,将结构化文档(比如 HTML 和 XML)解析成一系列的节点,再由这些节点组成一个树状结构(DOM Tree)。所有的节点和最终的树状结构,都有规范的对外接口

一、节点

  • DOM 的最小组成单位叫做节点(node)。文档的树形结构(DOM 树),就是由各种不同类型的节点组成。每个节点可以看作是文档树的一片叶子
  • 浏览器提供一个原生的节点对象Node,上面这七种节点都继承了Node,因此具有一些共同的属性和方法
    • Document:整个文档树的顶层节点
    • DocumentTypedoctype标签(比如<!DOCTYPE html>
    • Element:网页的各种HTML标签(比如<body><a>等)
    • Attribute:网页元素的属性(比如class="right"
    • Text:标签之间或标签包含的文本
    • Comment:注释
    • DocumentFragment:文档的片段

2、检测节点类型:node.nodeType  

  • 文档节点(document):9,对应常量Node.DOCUMENT_NODE
  • 元素节点(element):1,对应常量Node.ELEMENT_NODE
  • 属性节点(attr):2,对应常量Node.ATTRIBUTE_NODE
  • 文本节点(text):3,对应常量Node.TEXT_NODE
  • 文档片断节点(DocumentFragment):11,对应常量Node.DOCUMENT_FRAGMENT_NODE
  • 文档类型节点(DocumentType):10,对应常量Node.DOCUMENT_TYPE_NODE
  • 注释节点(Comment):8,对应常量Node.COMMENT_NODE

3、node.nodeName属性返回节点的名称 

  • 文档节点(document):#document
  • 元素节点(element):大写的标签名
  • 属性节点(attr):属性的名称
  • 文本节点(text):#text
  • 文档片断节点(DocumentFragment):#document-fragment
  • 文档类型节点(DocumentType):文档的类型
  • 注释节点(Comment):#comment
// HTML 代码如下
// <div id="d1">hello world</div>
var div = document.getElementById('d1');
div.nodeName // "DIV"

4、node.nodeValue属性返回一个字符串,表示当前节点本身的文本值,该属性可读写

  只有文本节点(text)和注释节点(comment)有文本值,因此这两类节点的nodeValue可以返回结果,其他类型的节点一律返回null。同样的,也只有这两类节点可以设置nodeValue属性的值,其他类型的节点设置无效。

// HTML 代码如下
// <div id="d1">hello world</div>
var div = document.getElementById('d1');
div.nodeValue // null
div.firstChild.nodeValue // "hello world"

div是元素节点,nodeValue属性返回nulldiv.firstChild是文本节点,所以可以返回文本值。

5、Node.textContent属性返回当前节点和它的所有后代节点的文本内容。

二、使用DOM获取元素(Element对象)

1.通过名称类型访问节点

(1)getElementById();

(2)getElementsByTagName();

2.利用父子关系查询节点

(1).ChildNodes //获取全部子节点数组(在Firefox chrome ie9中会包含文本节点)

(2).children //只选择标签节点的子元素

(3).parentNode  //父节点

(4).offsetNode  //绝对定位的父节点

(5).hasChildnNodes()  //判断是否有子节点 返回布尔值

(6).firstChild  //第一个子节点  (在Firefox chrome ie9中会包含文本节点)

(7).lastChild //最后一个子节点  (在Firefox chrome ie9中会包含文本节点)

3.利用兄弟关系访问节点

(1).nextSibling

(2).previousSibling

兼容性:在Firefox、chrome等浏览器中会包含文本节点(空节点)

(兼容处理nextSibing)

 function(node)
{
var tempLast=node.parentNode.lastChild;
if(node==tempLast)
return null;
var tempObj=node.nextbiSing;
while(tempObj.nodeType !=1 && tempObj!=tempLast)
tempObj=tempObj.nextSibling;
return (tempObj.nodeType==1)?tempObj;null;
}

三、获取节点属性

(1)gitAttribute(属性名);  //获取属性值

(2)setAttribute(属性名,属性值);  //设置属性值

(3)removeAttribute(属性名);  //删除属性值

四、创建和添加节点

1、创建节点

(1)createElement("标签名");

(2)createTextNode("文本内容");

(3)createDocumentTragment();

2、添加节点

appendChild(nodename);  //添加子节点//默认插入到末尾//动作删除创建位置,插入到新位置

3、删除节点

removeChild(nodename);  //找的父元素删除。。。。 x.parentNode.removeChild(x);

4、替换节点

replaceChild(newNode,oldNode);  //查找父元素替换。。。 x.parentNode.replaceChild(oNewP,oOldP);

5、在特定节点前插入

insertBefore(newNode,targetNode);  

6、在特定节点后插入

 function insertAfter(newElement,targetElement)
{
if(oParent.lastChild==targetElement)
oParent.appendChild(newElement);
else
oParent.insertBefore(newElement,targetElement.nextSibling);
}

[js笔记整理]DOM 篇的更多相关文章

  1. [js笔记整理]正则篇

    一.正则基本概念 1.一种规则.模式 2.强大的字符串匹配工具 3.在js中常与字符串函数配合使用 二.js正则写法 正则在js中以正则对象存在: (1)var re=new RegExp(正则表达式 ...

  2. [js笔记整理]面向对象篇

    一.js面向对象基本概念 对象:内部封装.对外预留接口,一种通用的思想,面向对象分析: 1.特点 (1)抽象 (2)封装 (3)继承:多态继承.多重继承 2.对象组成 (1)属性: 任何对象都可以添加 ...

  3. [js笔记整理]事件篇

    一.事件流1.冒泡事件:从特定的事件到不特定事件依次触发:(由DOM层次的底层依次向上冒泡)(1)示例: <html onclick="add('html<br>')&qu ...

  4. 高性能JS笔记3——DOM编程

    一.访问与修改DOM DOM和JS 相当于两个岛屿,访问操作的次数越多,要交的过路费越多,对性能产生很大影响. 减少访问DOM的次数,把运算尽量留在JS端操作. 二.innerHTML 对比 DOM ...

  5. 微信小程序笔记整理--入门篇。

    7-2 微信小程序入门篇 准备篇 1.登录网址,https://mp.weixin.qq.com 注册一个微信小程序. 2.获取微信小程序appid,登录自己的小程序后台,在开发者设置中获得appid ...

  6. js 笔记整理

    Js中for.for-in.forEach以及for-of的用法及特性对比 for-in for...in以任意顺序遍历一个对象的可枚举属性.所以for-in不适合用来迭代一个Array.同时,for ...

  7. JS第一周学习笔记整理

    目录 JS正式课第一周笔记整理 JS正式课第一周笔记整理 webstorm : 代码编辑器 浏览器: 代码解析器: Git : 是一个工具;用于团队协作开发项目管理代码的工具:在工作中用git.svn ...

  8. 【笔记】DOM探索基础篇(二)

    # 浏览器的渲染(HTML解析) ——参考: <前端必读:浏览器内部工作原理>http://kb.cnblogs.com/page/129756/ <谈谈DOMContentLoad ...

  9. [笔记]原生JS实现的DOM操作笔记

    原生JS实现的DOM一系列操作参考: 原生JavaScript封装DOM库 siblings: 原生JS-查找相邻的元素-siblings方法的实现 addClass,removeClass,hasC ...

随机推荐

  1. 基于原生js的返回顶部组件,兼容主流浏览器

    基于原生js的返回顶部插件,兼容IE8及以上.FF.chrome等主流浏览器. js文件中封装了getScrollTop()和changeScrollTop()函数分别用于获取滚动条滚动的高度和修改滚 ...

  2. java学习笔记 --- String类

    一.定义 就是由多个字符组成的一串数据.也可以看成是一个字符数组. 注意: 1.字符串是常量:它们的值在创建之后不能更改.为什么? 意思就是说字符串确定了,就会在常量池中生成这个字符串. 所以说它的值 ...

  3. VisualVM监控远程主机上的JAVA应用程序

    使用VisualVM监控远程主机上JAVA应用程序时,需要开启远程主机上的远程监控访问,或者在远程JAVA应用程序启动时,开启远程监控选项,两种方法,选择其中一种就可以开启远程监控功能,配置完成后就可 ...

  4. Linux网络设备驱动(一) _驱动模型

    Linux素来以其强大的网络功能著名,同时, 网络设备也作为三大设备之一, 成为Linux驱动学习中必不可少的设备类型, 此外, 由于历史原因, Linux并没有强制对网络设备贯彻其"一切皆 ...

  5. Legendary Items-微软实习生笔试第一题

    题目如下: 这道题难点不仅在于正确理解题意,判断递归条件,更在于用数学方法推出解决公式.因为N最大为1百万,而内存只有256MB, 所以暴力递归肯定会超时,超空间. 不过,我才疏学浅,又没有大量时间去 ...

  6. nginx 入门配置

    这个星期公司的定期分享内容是Nginx,于是就要写作业了. 一.动静分离 1.下载Windows 版本的Nginx,解压,放到C盘下.进入目录,然后按然shift键右键,打开命令行,输入: start ...

  7. 【Flex】去除外边框,底背景透明,改变exe的icon

    一.去除程序外边框 1.在 xx-app.xml文件里,找到  <!-- <systemChrome></systemChrome> -->  这句话,然后删掉注释 ...

  8. fixed应用

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  9. List去除重复的元素

         有两种方法,一种是去重不带顺序的,一种是去重带顺序的. /* * 方法1: 无顺序 * Hastset根据hashcode判断是否重复,数据不会重复 */ public static Lis ...

  10. TabBar自定义方式(一)

    1.思路:创建一个继承UIView的TabBar类,并将需要的item添加到TabBar上面去,并用代理来处理相应的时间 [self.view bringSubviewToFront:self.one ...