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

一、节点

  • DOM 的最小组成单位叫做节点(node)。文档的树形结构(DOM 树),就是由各种不同类型的节点组成。每个节点可以看作是文档树的一片叶子
  • 浏览器提供一个原生的节点对象Node,上面这七种节点都继承了Node,因此具有一些共同的属性和方法
    • Document:整个文档树的顶层节点
    • DocumentType:doctype标签(比如<!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属性返回null。div.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. 1. web前端开发分享-css,js入门篇

    关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学 ...

  2. web前端开发分享-css,js入门篇(转)

    转自:http://www.cnblogs.com/jikey/p/3600308.html 关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人 ...

  3. 前端面试题目汇总摘录(JS 基础篇)

    JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string typeof null; // o ...

  4. web前端开发分享-css,js入门篇

    学习没有捷径,但学习是有技巧与方法.   一,css入门篇:   推荐书籍:css哪些事儿,精通css. 理由:css那些事儿,他是一本介绍css基础类的书,是入门的经典读物. 系统的介绍了css的选 ...

  5. JS DOM操作(创建、遍历、获取、操作、删除节点)

    创建节点 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="u ...

  6. JS创建对象篇

    JS创建对象篇 Object构造函数创建 var person = new Object(); person.name = "Tom"; person.age = 10; pers ...

  7. 货架工程项目之js dom实现项目工程进度图

    笔者最近要负责有个项目工程网站的安装进度过程,实现的效果要求大概如下图所示 由于笔者没有参与到数据库的制作,得知他们这个项目设计工序的时候就一个开始日期的和完成日期,连整个项目的安装结束时间都没有简直 ...

  8. js学习篇1--数组

    javascript的数组可以包含各种类型的数据. 1. 数组的长度 ,直接用 length 属性; var arr=[1,2,3]; arr.length; js中,直接给数组的length赋值是会 ...

  9. 2. web前端开发分享-css,js进阶篇

    一,css进阶篇: 等css哪些事儿看了两三遍之后,需要对看过的知识综合应用,这时候需要大量的实践经验, 简单的想法:把qq首页全屏另存为jpg然后通过ps工具切图结合css转换成html,有无从下手 ...

随机推荐

  1. highCharts参数实例解释

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  2. [整理]C语言中的a,&a和&a[0]

    #include<stdio.h> int main(void) { int a[]={1,2,3}; printf("%0X\n",a); // a的类型原本是int ...

  3. 转 -- ARM 中 LDR伪指令

    我们知道ARM CPU中有一条被广泛使用的指令LDR,它主要是用来从存储器(确切地说是地址空间)中装载数据到通用寄存器.但不论是ARMASM还是GNU ARM AS,都提供了一条与之同名的伪指令LDR ...

  4. 【leetcode 简单】 第六十题 反转链表

    反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭代 ...

  5. sklearn_SVC_支持向量机

    # coding:utf-8 import numpy as np from sklearn.svm import SVC import matplotlib.pyplot as plt #生成数据 ...

  6. oracle06

    1. Oracle的体系结构 - 了解 1.1. Oracle数据库和Oracle实例 Oracle 服务器软件部分由两大部分组成, Oracle 数据库 和 Oracle 实例. 两者的解释如下: ...

  7. Linux 查看内存插槽数、最大容量的方法

    查看内存插槽数: dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range 查看最大容量: dmidecode ...

  8. 【读书笔记::深入理解linux内核】内存寻址【转】

    转自:http://www.cnblogs.com/likeyiyy/p/3837272.html 我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0 ...

  9. YUV422(UYVY)转RGB565源代码及其讲解.md

    目录 前言 源码 代码分析 YUV三个分量的关系 循环遍历 结束语 前言 使用zmm220核心板,IFACE102版本的内核等,4300型号的LCD,XC7011_SC1145摄像头,亲测有效. 本文 ...

  10. django Rest Framework----GenericAPIView 通用视图 GenericAPIView源码分析

    一.GenericAPIView GenericAPIView扩展了APIView,为标准列表和详细视图添加了常见的行为. 提供的每个具体通用视图都是一个GenericAPIView或多个mixin类 ...