《JavaScript》——DOM
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的更多相关文章
- 《JavaScript》数组Array
构造函数 var arr1 = new Array();// [] 空数组 var arr2 = new Array(3);//定义长度,0是空数组 var arr3 = new Array(1,2, ...
- 《JavaScript》JavaScript的名字和版本
语言标准版本名字:ECMAScript(ECMA是欧洲计算机制造协会,据说可能是专门做标准的,除了JavaScript遵循这个标准以外,还有XX....) Jscript(IE对该语言实现版本的 ...
- 《JavaScript》web客户端存储
Web存储: 兼容IE8在内的所有主流浏览器,不兼容早期浏览器:支持大容量但非无限量 LocalStorage和sessionStorage是window对象的两个属性,这两个属性都代表同一个stor ...
- 《JavaScript》高级程序设计第21章:Ajax和Comet,jsonp
一.创建XMLHttpRequest对象 二.XHR的用法 五.跨域资源共享 六.其他跨域技术七.安全七.安全 1. 图像Ping 2. JSONP(JSON with padding,填充式JSON ...
- 《JavaScript》 程序基本知识 数据类型。 {0912上} {0912下}
JS脚本语言: 这是JaxaScript的全称名 JS是网页里面使用的脚本语言 JS是一个非常强大的语言 JS的基础语法 注释语法: 单行注释 // 多行注释 /**/ 输出语法: 双标 ...
- 《JavaScript》JS中的常用方法attr(),splice()
1.jquery中用attr()方法来获取和设置元素属性,attr是attribute(属性)的缩写,在jQuery DOM操作中会经常用到attr(),attr()有4个表达式. attr(属性名) ...
- 《javascript》高级程序设计——类型转换错误
容易发生类型转换错误的另一个地方,就是流控制语句.像if之类的语句在确定下一步操作之前,会自动把任何值转换成布尔值.尤其是if语句,如果使用不当,最容易出错.来看下面的例子. function con ...
- 《JavaScript》高级程序设计第7章 函数表达式
7.2 闭包 定义: 闭包是指有权访问另一个函数作用域中的变量的函数. 理解闭包: 作用域链: 当某个函数被调用时,会创建一个执行环境以及相应的作用域链. 作用域链中,外部函数的活动对象始终处于第二位 ...
- 《JavaScript》字符转义
escape/unescape encodeURIComponent/decodeURIComponent encodeURI/decodeURI 转义函数会对一些 特殊字符进行转义编码 英文.数字. ...
随机推荐
- CSS3 Flex布局和Grid布局
1 flex容器的六个属性 flex实现垂直居中: <div class="box"> <span class="item">< ...
- MySQL服务器端&客户端常见错误
目录(?)[+] 客户端 服务器端 客户端 1.ERROR 2013 (HY000) at line 1: Lost connection to MySQL server during query 使 ...
- [AGC004D] Teleporter(贪心+)
Description 维尼管辖的领土很大,我们可以抽象为n个城市,其中1号点为首都.这n个城市之有n条单向电缆,一条信息经过一条电缆进行传输所需时间会+1s,然而维尼并不能忍受时间白白被续,他要求从 ...
- [bzoj 1782] [Usaco2010 Feb]slowdown慢慢游
[bzoj 1782] [Usaco2010 Feb]slowdown慢慢游 Description 每天Farmer John的N头奶牛(1 <= N <= 100000,编号1-N)从 ...
- form+iframe+file 页面无刷新上传文件并获取返回值
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 交叉编译x264和ffmpeg
1.x264 ./configure --host=arm-hisiv300-linux CC=arm-hisiv300-linux-gcc --enable-pic --prefix=/usr/lo ...
- [Oracle] Lock&Latch梳理
Oracle lock&latch 1. 概述 4种锁机制 lock latch pin mutex 保证资源在并发访问和修改时不被破坏 锁类型 行为 持有时间 级别 保护类型 lock 队列 ...
- EOJ 3.30 A. 打工时不可能打工的【贪心】
[链接]:https://acm.ecnu.edu.cn/contest/59/problem/A/ A. 打工时不可能打工的 Time limit per test: 2.0 seconds Mem ...
- Codeforces Round #455 (Div. 2) A. Generate Login【贪心】
A. Generate Login time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- IntelliJ IDEA中日志分类显示设置
说明:很遗憾,IDEA中无法实现日志分类查看,比如只能显示INFO级别的,但是可以有搜索功能[Ctrl]+[F].好像找不到好用的插件,Andorid Studio好像有一个插件可以. 解决方式: 直 ...