原生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进度条. 二.简 ...
随机推荐
- python 修改文件编码方式
import chardet import os def strJudgeCode(str): return chardet.detect(str) def readFile(path): try: ...
- python编码(六)
1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有 ...
- 关于Python Package下的Module import方式[转]
2012年有一个目标我没有达成,那就是深入学习和使用Python语言.这个目标被其他学习任务和工作无情的抢占了,当然最主要的原因还是我重视不够^_^. 近期恰逢有一些Python工程的开发工作要做,就 ...
- java梳理-序列化与反序列化
一背景: 之前笔记关于rpc框架介绍中,提到为了调用远程服务,需要再确定消息结构后考虑序列化与反序列化,序列化主要是把对象转换成二进制码便于网络传输,反序列化就是相反的,主要目的是生成对象便于后续处理 ...
- PAT甲 1008. Elevator (20) 2016-09-09 23:00 22人阅读 评论(0) 收藏
1008. Elevator (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The highest ...
- OpenGl 坐标转换 (转载)
OpenGl 坐标转换 (转载) 1. OpenGL 渲染管线 OpenGL渲染管线分为两大部分,模型观测变换(ModelView Transformation)和投影变换(Projection Tr ...
- node csv
想实现下载csv文件的功能,内容放在mysql的blob中,在网上找的都是关于csv模块的. 由于csv的更新,网上的很多方法都用不了,比如csv(),现在已经变了:http://csv.adalta ...
- 哈希连接(hash join) 原理
哈希连接(hashjoin) 访问次数:驱动表和被驱动表都只会访问0次或1次. 驱动表是否有顺序:有. 是否要排序:否. 应用场景: 1. 一个大表,一个小表的关联: ...
- [leetcode] 17. Merge Two Sorted Lists
这个非常简单的题目,题目如下: Merge two sorted linked lists and return it as a new list. The new list should be ma ...
- Python学习-20.Python的Urllib模块
除了 Http 模块可以模拟 Http 请求外,使用 Urllib 模块也是可以模拟 Http 请求的,只不过功能相对弱一点. import urllib.request opener = urlli ...