JavaScript中的DOM及相关操作
一、什么是DOM
JavaScript由ECMAScript、DOM和BOM三部分组成,其中DOM代表描述网页内容的方法和接口,即文档对象模型(Document Object Model)。在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM,而树形结构就是我们常说的DOM树。
维基百科中介绍DOM更为准确:DOM是一种跨平台和语言非依赖性的应用程序编程接口,即处理现在的HTML,XHTML或XML文档作为树结构,其中每个节点是一个对象,每个节点表示该文档的一部分。
二、DOM节点
1.节点的类型
DOM树是由许多不同类型的节点组成的,而这些节点类型都有一个nodeType值,我们可以通过nodeType值来判断我们获取的或想要的是不是对应类型的节点。
| 节点类型 | 元素节点(标签节点) | 属性节点 | 文本节点(空格、换行、文字) | 注释节点 | document节点 |
| nodeType值 | 1 | 2 | 3 | 8 | 9 |
除了通过nodeType值判断类型以外我们还可以通过nodeName来查看元素节点和属性节点的节点名称,还有使用nadeValue来查看属性节点的属性值。
2.获取元素节点
document.getElementById(id);
document.getElementByTagName(tagname);
document.getElementByClassName(classname);
通常想要在JavaScript中更改或使用HML中的元素节点时,都要先获取才可以调用,那么我们就是通过设置元素的Id属性或Class属性来获取,或是使用标签名获取。但是要注意的是getElementById()方法不能工作在XML中,在XML文档中,必须通过拥有id属性来进行搜索,而此类型必须在 XML DTD 中进行声明。
获取完我们想要的节点后,我们还可以通过节点的关系来操作其他节点,这里我们以div元素为初设元素节点来举例。
2.1 子节点
div.children();
div.childNodes();
获取div下面的子节点,而div.children()只能获取到是元素节点的子节点,而div.childNodes()会获取所有类型的子节点,也就是说会解析空白文本节点。
2.2 父节点
div.parentNode();
div.offsetParent();
获取div的父节点,div.offsetParent()获取的是具有定位属性的祖先节点,即从父节点开始查找,如果父节点没有定位属性,那么再找父节点的父节点,直到找到有定位属性的节点。
2.3 兄弟节点
//下一个兄弟节点
div.nextElementSibling();
div.nextSibling();
//上一个兄弟节点
div.previousElementSibling();
div.previousSibling();
这里有没有Element很关键,跟获取子节点一样,div.nextSibling()和div.previousSibling()会解析空白节点,会获取到div下面的空格或回车。
2.4 首尾子节点
//获取div的第一个子节点
div.firstElementChild();
div.firstChild();
//获取div的最后一个子节点
div.lastElementChild();
div.lastElementChild();
区别同上。
3.节点操作
我们除了可以在HTML中添加、删除个修改节点,也可以在JavaScript中对节点进行操作。
3.1 创建节点
//创建节点/创建文本节点
createElement();
createTextNode();
创建文本节点一般用来向元素节点中添加内容,它创建的是静态文本,不能像innerHTML一样带有HTML格式,所以creatTextNode()更安全,而innerText又有浏览器兼容问题。
3.2 添加节点
我们创建的节点不会自动添加到HTML里,需要我们对创建的节点进行操作。
//向尾部添加子节点
appendChild();
//向目标节点之前添加
insertBefore(newElement,targetElement);
insertBefore()第二个参数是可选参数,如果不写第二个参数那么就默认向尾部添加,即等同于appendChild();
3.3 替换
//将旧节点换为新节点
replaceChild(newElement,oldElement);
div.replaceChild(newElement,oldElement) ,这里无论是新节点还是旧节点,都必须是div的子节点。
3.4 删除
removeChild();
注意删除的是子节点。
3.5 克隆/复制
//深复制或浅复制
cloneNode(boolean);
当参数的布尔值为true时为深复制,即会复制节点本身以及它以下的所有子节点。
当参数的布尔值为false时为浅复制,只会复制节点自己本身。
3.6 判断
hasChildNode();
判断是否有子节点,返回布尔值。
3.7 属性
//获取节点属性
getAttribute();
//设置节点属性
setAttribute();
//删除节点属性
removeAttribute();
要注意的一点就是class属性不能通过setAttribute(); 设置。
三、DOM的优缺点
JavaScript中的DOM及相关操作的更多相关文章
- Javascript中日期函数的相关操作
Date对象具有多种构造函数,下面简单列举如下: new Date() new Date(milliseconds) new Date(datestring) new Date(year, month ...
- 借助JavaScript中的Dom属性改变Html中Table边框的颜色
借助JavaScript中的Dom属性改变Html中Table边框的颜色 -------------------- <html> <head> <title>我是页 ...
- grails项目中(DB的相关操作)
grails项目中(DB的相关操作) save:保存Domain对象的数据到对应的库表中(可能是insert也可能是update) findBy: 动态方法,查找并返回第一条记录,方法名可以变化 eg ...
- javascript中获取dom元素的高度和宽度
javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网 ...
- javascript中获取dom元素高度和宽度
javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网 ...
- js | javascript中获取dom元素的高度和宽度
javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网 ...
- 一些JavaScript中的DOM的优化小技巧
在进行DOM优化时需要关注的问题有:修改DOM的时候,会引起页面的重排,重绘.因为JS是单线程执行的,那么在重排重绘的过程中可能会阻塞用户的操作.为了更好的用户体验,必须要严格控制这些操作. 一.对象 ...
- javascript中的DOM介绍(一)
一.基础知识点 1.DOM是文档对象模型,是针对HTML和XML文档的一个API(应用程序接口) 2.DOM描绘了一个层次化的节点数,允许开发人员进行添加,移除个修改等操作 3.IE浏览器中所有的DO ...
- JavaScript中forEach的用法相关
首先说下JavaScript的forEach的标准格式. 为数组中的每个元素执行指定操作. array1.forEach(callbackfn[, thisArg]) 参数 定义 array1 必需. ...
随机推荐
- 用java 集合和映射实现文章的单词数目统计
package 一_统计字母出现; import java.io.File; import java.io.FileNotFoundException; import java.util.HashMa ...
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 题目9 : Minimum
时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 You are given a list of integers a0, a1, …, a2^k-1. You need t ...
- Shell 变量知识
1.自定义变量:自定义变量不能以数字开头. ()root#a=’cd /etc/’ #设置自定义变量. root#etho $a #使用变量. 2.全局变量:export可设置全局变量不能以数字开头. ...
- WindowsAPI每日一练(1) MessageBoxA
WindowsAPI每日一练系列 :https://www.cnblogs.com/LexMoon/category/1246238.html WindowsAPI每日一练(1) WinMain 要跟 ...
- FJUT3703 这还是一道数论题(二分 + hash + manacher 或者 STL + hash 或者 后缀数组 + hash)题解
Problem Description 最后来个字符串签个到吧,这题其实并不难,所需的算法比较基础,甚至你们最近还上过课. 为了降低难度,免得所有人爆零.这里给几个提示的关键字 :字符串,回文,二分, ...
- SAP的软件维护费用,交还是不交?
SAP的软件维护费用,交还是不交? 首先我们要明确一点,什么是软件维护费用? 软件维护费用是指在企业购买了软件厂商的软件产品之后,软件厂商每年按照一定比例向企业收取一定的技术支持维护费用.收取 ...
- Java内存可见性
如果一个线程对共享变量的修改,能够被其它线程看到,那么就能说明共享变量在线程之间是可见的.如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量.Java内存模型(Java ...
- 廖雪峰 JavaScript 学习笔记(判断、循环)
条件判断 固定格式:if () { ... } else { ... } ,else可选 1.多行条件判断,通常把else if连写在一起,来增加可读性 例子: var age = 3; if (a ...
- angular-material(一)
1.引入文件(angular-material.css.angular.min.js.angular-animate.js.angular-aria.min.js.angular-material.j ...
- robot framework学习二-----元素定位
文章摘自:https://www.cnblogs.com/fnng/p/3901391.html 不要误认为Robot framework 只是个web UI测试工具,更正确的理解Robot fram ...