DOM (Document Object Model) 即文档对象模型, 针对 HTML 和 XML 文档的 API (应用程序接口) 。DOM 描绘了一个层次化的节点树,执行开发者加入、移除和改动页面的某一部分。

DOM中提供了两个节点接口,一个Node接口,一个是document接口,这两种接口的属性和方法基本包括了对节点树的全部操作。

那什么是节点树那?

节点树:载入 HTML 页面时, Web 浏览器生成一个树型结构, 用来表示页面内部结构。 DOM 将这样的树型结构理解为由节点组成。

比方例如以下HTML代码:

<html>
<head>
<title>DOM</title>
<meta http-equiv="Content-type" content="text/html;charset=gb2312"/>
</head>
<body>
<p>请先登录</p>
<form name="myForm">
姓名:<input type="text" name="myName">
密码:<input type ="password" name="myPassword">
<input type="button" value="确定">
</form>
</body>
</html>

生成的节点树例如以下所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

从节点树中大致能够看出,节点分为三种类型,元素节点,文本节点、属性节点。DOM中提供的Document接口和Node接口的方法与属性就是对这些节点进行操作(增删改查)。

上面说了,我们利用文档接口(Document)的一些方法对HTML节点树的操作就是一些增删改查,那么在增删改查之前,我们的先得有节点吧。这些节点能够直接在HTML中编写,也能够用JavaScript脚本创建,当然了,这里用JavaScript创建节点的优点在于能够动态的对HTML文档进行改动。避免了在HTML界面直接改动代码,这样不仅达到了HTML页面与JavaScript脚本解耦和的作用。并且还能够实现JavaScript脚本动态的操纵HTML页面。

以下这幅图片是文档接口(Document) 的部分属性与方法

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

从上面的图片能够看出,Document接口的方法能够用来创建或获得一个节点,创建分成三种,即元素节点、属性节点、文本节点,訪问方法分为两种。

遗憾的是我所列举的方法与属性都不全,只是这些方法都是一些经常使用的。

以下在介绍一些Node节点关系与节点类型,还包含Node接口的一些方法,这些方法側重于增删改查。

在上面这幅图片中。Node接口中加入节点的方法有两个,对节点的操作还有删除、替换、复制等操作。

贴张HTML代码文档,以下的一些操作都是针对这部分HTML代码进行的。

<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=gb2312"/>
<title>DOM基础</title>
<script type="text/javascript" src="demo.js"> </script>
</head>
<body > <div align="center">開始</div> <div id="box" align="center" title="标题" class="pox" style="color:red;" >
<p>測试div1</p>
<p>測试div2</p>
<p>測试div3</p>
</div> <div align="center" >结束</div>
</body>
</html>

1、创建元素节点p,和文本节点tex。而且在元素节点p以下加入文本节点text。代码和对照效果图例如以下

window.onload=function(){
var box=document.getElementById('box');// 查找box节点
var p =document.createElement('p');//仅仅是创建元素节点p 。还没有加入到文档中去,仅仅是驻留在内存中。
box.appendChild(p);//加入节点。p为节点的名称。 var text =document.createTextNode('此节点为当前节点的最后一个子节点');//创建文本节点text 主流在内存中。还没有加入到HTML中去。 p.appendChild(text);//给p节点加入文本元素
};

     
        

2、插入节点(在某节点之前插入)

window.onload=function(){
var box=document.getElementById('box');
var div =document.createElement('div');//仅仅是创建元素节点p 还没有加入到文档中去。仅仅是驻留在内存中。 box.parentNode.insertBefore(div,box); //先将指针跳到插入位置的父节点,然后在运行插入
var text =document.createTextNode('測试一下啊!');//创建文本节点text
div.appendChild(text);//给p节点加入文本元素
};

3、自己定义方法。插入节点(在某节点之后)

// 插入节点(在某节点之后)利用创建一个包括insertBefore()的函数,将目标节点与插入节点座位參数传递进去。
function insertAfter(newElement,targetElement){
var parent =targetElement.parentNode; //得到父节点,就是body 假设层次较多,父节点不一定是body
if(parent.lastChild==targetElement){ //推断目标节点是否为该parent元素的最后一个节点。若是,则运行appendChild()操作
parent.appendChild(newElement,targetElement)
}else{ //若目标节点不是parent的最后一个节点。则将目标节点指针下移一位,得到其兄弟节点
parent.insertBefore(newElement,targetElement.nextSibling) //这样就能够在目标节点之后插入了。 }
} window.onload=function(){
var box=document.getElementById('box');
var p =document.createElement('p');
insertAfter(p,box);
var text=document.createTextNode('在此插入一个文本节点');
p.appendChild(text);
};

4、移除节点代码与效果图例如以下

window.onload=function(){
var box=document.getElementById('box');
alert('你将要移除第一个測试DIV');
box.removeChild(box.childNodes[1]) //移除box的第一个子节点。
alert('你将要移除整个box');
box.parentNode.removeChild(box); //移除整个box。
};

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">  
 

5、替换节点

window.onload=function(){
var box=document.getElementById('box');
var p =document.createElement('p');//仅仅是创建元素节点p 还没有加入到文档中去。仅仅是驻留在内存中。
box.parentNode.insertBefore(p,box); //先将指针跳到插入位置的父节点,然后在运行插入
var text =document.createTextNode('測试一下啊! ');//创建文本节点text
p.appendChild(text);//给p节点加入文本元素
alert('你将要把第一測试DIV换成“測试一下啊”');
box.replaceChild(p,box.childNodes[1]);
};

6、克隆节点

window.onload=function(){
var box=document.getElementById('box');
var clone = box.childNodes[1].cloneNode(true); //获取第二个子节点,true 表示复制内容
box.appendChild(clone);
};

小结

以上就是节点操作的部分方法,节点操作的方法不只这些,还有非常多非常多,我们学习DOM,就是学习里面对象的方法与属性的使用。希望我们能在今后的项目中经常使用。PS一句。有没有发现这些方法属性就死增删改查操作,先查,在操作,上面的一些操作都是依照这个步骤来的。

《JavaScript》——DOM的更多相关文章

  1. 《JavaScript》数组Array

    构造函数 var arr1 = new Array();// [] 空数组 var arr2 = new Array(3);//定义长度,0是空数组 var arr3 = new Array(1,2, ...

  2. 《JavaScript》JavaScript的名字和版本

    语言标准版本名字:ECMAScript(ECMA是欧洲计算机制造协会,据说可能是专门做标准的,除了JavaScript遵循这个标准以外,还有XX....)    Jscript(IE对该语言实现版本的 ...

  3. 《JavaScript》web客户端存储

    Web存储: 兼容IE8在内的所有主流浏览器,不兼容早期浏览器:支持大容量但非无限量 LocalStorage和sessionStorage是window对象的两个属性,这两个属性都代表同一个stor ...

  4. 《JavaScript》高级程序设计第21章:Ajax和Comet,jsonp

    一.创建XMLHttpRequest对象 二.XHR的用法 五.跨域资源共享 六.其他跨域技术七.安全七.安全 1. 图像Ping 2. JSONP(JSON with padding,填充式JSON ...

  5. 《JavaScript》 程序基本知识 数据类型。 {0912上} {0912下}

    JS脚本语言: 这是JaxaScript的全称名 JS是网页里面使用的脚本语言 JS是一个非常强大的语言 JS的基础语法 注释语法:  单行注释 //     多行注释 /**/ 输出语法:   双标 ...

  6. 《JavaScript》JS中的常用方法attr(),splice()

    1.jquery中用attr()方法来获取和设置元素属性,attr是attribute(属性)的缩写,在jQuery DOM操作中会经常用到attr(),attr()有4个表达式. attr(属性名) ...

  7. 《javascript》高级程序设计——类型转换错误

    容易发生类型转换错误的另一个地方,就是流控制语句.像if之类的语句在确定下一步操作之前,会自动把任何值转换成布尔值.尤其是if语句,如果使用不当,最容易出错.来看下面的例子. function con ...

  8. 《JavaScript》高级程序设计第7章 函数表达式

    7.2 闭包 定义: 闭包是指有权访问另一个函数作用域中的变量的函数. 理解闭包: 作用域链: 当某个函数被调用时,会创建一个执行环境以及相应的作用域链. 作用域链中,外部函数的活动对象始终处于第二位 ...

  9. 《JavaScript》字符转义

    escape/unescape encodeURIComponent/decodeURIComponent encodeURI/decodeURI 转义函数会对一些 特殊字符进行转义编码 英文.数字. ...

随机推荐

  1. vue.js单文件组件中非父子组件的传值

    最近在研究vue.js,总体来说还算可以,但是在web开发群里有一些人问在单文件组件开发模式中非父子组件如何传值的问题,今天在这里讲讲,希望对大家有所帮助! 在官网api中的这段讲解很少,也很模糊:官 ...

  2. 【11】react 之 flux

    Flux 是 Facebook 使用的一套前端应用的架构模式.React 标榜自己是 MVC 里面 V 的部分,那么 Flux 就相当于添加 M 和 C 的部分. 1.1.  Flux介绍 Flux并 ...

  3. hdu 5930 GCD 线段树上二分/ 强行合并维护信息

    from NOIP2016模拟题28 题目大意 n个点的序列,权值\(<=10^6\) q个操作 1.单点修改 2.求所有区间gcd中,不同数个数 分析 1.以一个点为端点,向左或向右的gcd种 ...

  4. Iframe载入页面 及 跳转页面

    原文发布时间为:2009-05-05 -- 来源于本人的百度文章 [由搬家工具导入] 第一个文件 frame1.html <!DOCTYPE html PUBLIC "-//W3C// ...

  5. class.getDeclaredFields()与class.getFields()

    * getFields()与getDeclaredFields()区别:getFields()只能访问类中声明为公有的字段,私有的字段它无法访问.getDeclaredFields()能访问类中所有的 ...

  6. PHP安装oracle的php_oci和oci8扩展

    环境:centos6.9 php5.3.3 oracle客户端:下载链接:http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277 ...

  7. ASP.NET MVC创建静态页

    1.在MVC下新建一个类:StaticPageHelper public class StaticPageHelper { /// <summary> /// 根据View视图生成静态页面 ...

  8. Hrbust 2363 Symmys (Manacher + DP)

    题目链接  Hrbust 2363 来源  “科林明伦杯”哈尔滨理工大学第七届程序设计团队赛 Problem J 题意  给出一个长度为$1e6$的字符串,求最小可重回文子串覆盖数量 首先Manach ...

  9. 渗透测试集成环境Faraday

    渗透测试集成环境Faraday   Kali Linux集成了海量的渗透测试工具.但是这些工具在使用的时候,还是分离的.虽然用户可以通过Shell.日志/报告导入导出功能等方式,进行整合,但是仍然不便 ...

  10. centos7安装hadoop2.6.1,详细教程

    1.我搭建的是三台centos7的环境 首先准备三个centos7(文中出现的所有的链接都是我自己的) centos7下载地址(也可以上官网自行下载):https://pan.baidu.com/s/ ...