原生JavaScript的DOM操作方法总结
什么是DOM?
DOM即文档对象模型,Document Object Model。 是HTML和XML文档的编程接口。它提供了对文档的结构化的表述,并定义了一种方式可以使从程序中对该结构进行访问,从而改变文档的结构,样式和内容。DOM 将文档解析为一个由节点和对象(包含属性和方法的对象)组成的结构集合。简言之,它会将web页面和脚本或程序语言连接起来。
实际上,DOM就是浏览器为JavaScript提供的一系列的接口(由window.document提供),通过这些接口,我们可以操作web页面。
另外,DOM也可以给其他语言提供操作接口的,比如python。 这里,作为前端,我们只谈JavaScript。
一般,我们可以从DOM节点的创建、查询、更改、删除、属性操作等方面来谈DOM的api,这样更具有逻辑性。
DOM 创建
DOM节点往往是一个标签、文本或者属性等,我们可以通过元素的nodetype属性来判断这个节点的类型,下面是常见的:
- Element --- 元素,nodeType的值为1。
- Attribute --- 属性, nodeType的值为2。
- Text --- 文本,nodeType的值为3.
基本创建方式如下:
var el1 = document.createElement('div');
var el2 = document.createElement('input');
var node = document.createTextNode('hello world!');
DOM 查询
元素查询的API返回的结果是DOM节点或者是DOM节点的列表,document提供了下面几种查询方法:
// 返回当前文档中第一个类名为 "myclass" 的元素
var el = document.querySelector(".myclass"); // 返回一个文档中所有的class为"note"或者 "alert"的div元素
var els = document.querySelectorAll("div.note, div.alert"); // 获取元素
var el = document.getElementById('xxx');
var els = document.getElementsByClassName('highlight');
var els = document.getElementsByTagName('td');
另外,Element也提供了很多相对于元素的DOM导航方法:
// 获取父元素、父节点
var parent = ele.parentElement;
var parent = ele.parentNode; // 获取子节点,子节点可以是任何一种节点,可以通过nodeType来判断
var nodes = ele.children; // 查询子元素
var els = ele.getElementsByTagName('td');
var els = ele.getElementsByClassName('highlight'); // 当前元素的第一个/最后一个子元素节点
var el = ele.firstChild;
var el = ele.firstElementChild; var el = ele.lastChild;
var el = ele.lastElementChild; // 下一个/上一个兄弟元素节点
var el = ele.nextSibling;
var el = ele.nextElementSibling; var el = ele.previousSibling;
var el = ele.previousElementSibling;
DOM 更改
// 添加、删除子元素
ele.appendChild(el);
ele.removeChild(el); // 替换子元素
ele.replaceChild(el1, el2); // 插入子元素
parentElement.insertBefore(newElement, referenceElement);
属性操作
// 获取一个{name, value}的数组
var attrs = el.attributes;
// 获取、设置属性
var c = el.getAttribute('class');
el.setAttribute('class', 'highlight');
// 判断、移除属性
el.hasAttribute('class');
el.removeAttribute('class');
// 是否有属性设置
el.hasAttributes();
常见的面试问题
innerHTML与outerHTML的区别?
DOM元素的innerHTML, outerHTML, innerText, outerText属性的区别也经常被面试官问到, 比如对于这样一个HTML元素:<div>content<br/></div>。
innerHTML:内部HTML,content<br/>;
outerHTML:外部HTML,<div>content<br/></div>;
innerText:内部文本,content ;
outerText:内部文本,content ;
上述四个属性不仅可以读取,还可以赋值。outerText和innerText的区别在于outerText赋值时会把标签一起赋值掉,另外xxText赋值时HTML特殊字符会被转义。

原生JavaScript的DOM操作方法总结的更多相关文章
- 使用原生 JavaScript 操作 DOM
原文:https://www.sitepoint.com/dom-manipulation-vanilla-javascript-no-jquery/ 微软官方放弃了 IE10-,所以现在可以放心使用 ...
- JavaScript常用DOM操作方法和函数
查找节点ocument.querySelector(selectors) //接受一个CSS选择器作为参数,返回第一个匹配该选择器的元素节点.document.querySelectorAll(sel ...
- JavaScript中 DOM操作方法
DM是(Document Object Model)的简称. 一.找元素 document.getElementById() 根据id选择器找,最多找一个: document.getElemen ...
- 原生JavaScript HTML DOM Style 对象参考
Style 对象属性 可以在Style对象上使用以下属性: “CSS”列指示定义属性的CSS版本(CSS1,CSS2或CSS3). 属性 描述 CSS alignContent 当项目不使用所有可用空 ...
- 原生JavaScript常用的DOM操作
之前项目一直都是用JQuery或者Vue来做的,确实好用,毕竟帮我们解决了很多浏览器兼容问题,但是后面发现大公司面试题都是要原生Javascript来做,然后我就一脸懵逼哈哈哈,毕竟大公司需要的框架或 ...
- 常见的dom操作----原生JavaScript与jQuery
1.创建元素 文本节点 JavaScript: document.createElement(),只接收一个参数,创建后需要手动将其添加到文档树中,例如: var newDiv = document. ...
- 浅谈 原生javaScript&&react 实现全局触摸按钮(附带对addeventlistener的了解)
1.采用原生javaACript 实现全局触摸按钮 首先在控制台输出,观察事件有哪些关于触摸的字段可以使用,然后拿这些字段的数据开始来写方法. 因为要做的是全局触摸按钮,我需要拿到的是按钮时时的坐标位 ...
- 框架操作DOM和原生js操作DOM比较
问题引出 对于Angular和React操作DOM的速度,和原生js操作DOM的速度进行了一个比较: 一个同学做的demo 代码如下: <!DOCTYPE html> <html n ...
- 原生javascript模仿win8等待进度条。
一.序言 一直很中意win8等待提示圆圈进度条.win8刚出来那会,感觉好神奇!苦于当时没思路,没去研究.通过最近网上找找资料,终于给搞出来了!先上Demo,献丑了!预览请看:win8进度条. 二.简 ...
随机推荐
- Part 4 - Authentication(14-16)
from django.conf.urls import url from django.contrib import admin from django.contrib.auth import vi ...
- SQL 查找重复记录
CREATE TABLE product( ID INT IDENTITY(1,1) PRIMARY KEY NOT NULL, Pid INT NOT NULL, Pname VARCHAR(50) ...
- Spring3.x错误----Bean named "txAdvice" must be of type[org.aopallibance.aop.Advice
Spring3.x错误: 解决方法: aopalliance-1.0.jar 和 aopalliance-alpha1.jar之间的冲突.
- Windows命令行参数(不断更新)
这里先讲一下系统变量: 注意:一旦将路径加入到环境变量Path中,那么运行它下面的程序的时候就不用非得指定到目标路径中,直接键入命令就行了. 1.type命令:打开并读取文件里面的内容. C:\Use ...
- 排列<一>
理论和习题来源于书本,有些能用计算机模拟的题尽量用代码来解. 1.5个球放在3个不同的盒子里面,允许有盒子不放球,求有多少种可能?解:穷举,设盒子A,B,C,每个盒子都有0-5个球的可能,但是三个盒子 ...
- OpenGL中的帧缓存
OpenGL中的帧缓存 在OpenGL窗口中, 左下角的像素为(0, 0). 一般而言, 像素(x, y)占据的矩形区域左下角为(x, y), 右上角为(x+1, y+1). 1. 缓存及其用途 [1 ...
- WPF 最简单的TextBox水印
最简单的TextBox加水印的方法,但是不具有很强的通用性. 如果你只是使用一次,或者用的不多,偷偷懒可以使用. 因为此方法只需要修改TextBox的Template,而不用重写何任代码. 注意: 1 ...
- Unity Shader序列帧动画学习笔记
Unity Shader序列帧动画学习笔记 关于无限播放序列帧动画的一点问题 在学shader的序列帧动画时,书上写了这样一段代码: fixed4 frag(v2f i){ // 获得整数时间 flo ...
- Spring Boot - StateMachine状态机
是Spring Boot提供的状态机的现成实现. 理论(有点像工作流) 需要定义一些状态的枚举,以及一些引起状态变化的事件的枚举. 每个状态可以对应的创建一个继承自org.springframewor ...
- C#默认以管理员身份运行程序实现代码
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; names ...