DOM 的增删改查

本文不会详细讲解,只是简单提及知识要点,详细可以参考《dom高级编程》。

1. document.write

document.write('<h1>创建节点</h1>');

创建的节点会,重新生成一个html的DOM覆盖之前的,所以不可用。

2. create 系列创建

常用有四种方法,分别如下:

  • document.createCommot() 创建注释
  • document.createDocumentFragment()
  • document.createTextNode()
  • document.createElement()

说明:DocumentFragment,它作为一个“仓库”来使用,即可以在里面保存将来可能会添加到文档中的节点。

例子:

var comment = document.createCommot('A comment');
var fragment = document.createDocumentFragment();
var ul = document.getElementById("myList");
var li = null;
for (var i=0; i < 3; i++){
li = document.createElement("li");
li.appendChild(document.createTextNode("Item " + (i+1)));
fragment.appendChild(li);
}
ul.appendChild(fragment);
document.body.innerBefore(comment,document.body.firstChild);

3.高效的创建节点

  • innerHTML
  • outerHTML 包含自身节点的hmtl的返回
  • innerText 剔除所有tag,返回文本节点,等同于textContent
  • textContent 与innerText 区别在与 innerText不剔除标签转行的空格
  • outerText 在查询时与innerText几乎一样,区别在于赋值,outerText会将自身的节点替换掉,不建议使用
window.onload = function () {
var div = document.getElementById('div');
var str = "<p> this is document element demo</p>";
div.innerHTML = str;
console.log('outerHTML',div.outerHTML);
console.log('innerText',div.innerText);
console.log('textContent',div.textContent);
console.log('outerText',div.outerText);
}

4. 查找节点

有两套api,一套是node,另一套则是document。

Node

  • fistChild
  • lastChild
  • nextSibling
  • previousSibling
  • parentNode
  • childNodes[i]
  • childNodes.item(1)

例子:

// 遍历文本节点
// 递归
window.onload = function() {
var s = ""; function travel(space, node) {
if (node.tagName) {
s += space + node.tagName + '<br />';
} var len = node.childNodes.length;
for (var i = 0; i < len; i++) {
travel(space + '|-', node.childNodes[i]);
} }
travel("", document);
document.write(s);
}

DOM

实际上这套api解决了空白节点

  • firstElementChild
  • lastElementChild
  • nextElementSibling
  • previousElementSibling
  • children[1]

5. 类数组NodeList

NodeList 对象是一个节点的集合,是由 Node.childNodesdocument.querySelectorAll 返回的.

详细地址

具体实例如下如下:

var div = document.getElementById('div');
var nodes = div.childNodes; // nodes就是一个NodeList的实例化 function makeArray(Nodelist) {
var arr = null;
try {
return Array.prototype.slice.call(NodeList);
} catch(e) {
arr = [];
for(var i = 0, len = nodeList.length; i < len; i++) {
arr.push(nodeList[i])
}
}
return arr;
}

6. 类数组对象HTMLCollection

HTML简单来说是节点集合,例如,获取ul下的所有li,就是一个HTMLCollection,HTMLCollection 是即时更新的。

详细地址

它与Nodelist的区别,前者主要用在element,后者主要用于node。另外,他们是否时时更新,点击详细地址查看。

  • getElementsByTagName
  • document.scripts
  • document.links
  • document.images
  • document.forms
  • tr.cells
  • select.options

7. 类数组对象NamedNodeMap

NamedNodeMap 接口表示属性节点 Attr 对象的集合。

详细地址

  var box = document.querySelector('.box');
var attrs = box.attributes;
console.log(attrs);
console.log('class',attrs.class);
console.log('data-role',attrs['data-role']);

8. 类数组的对象的动态性

时时更新是什么?

举个例子:

var divs = document.getElementsByTagName('div');
console.log(divs.length);
document.body.appendChild('div');
console.log(divs.length)

你会发现前后两次输出的divs.length是不一样的。这是简单例子,实际上事件委托也是利用动态性,e.target 和上面divs.length非常类似。

9. 现代浏览器查找元素的方法

  1. 元素和节点区别。(节点包含元素)
  2. Api
  • document.getElementById
  • getElementsByTagName
  • document.getElementsByName
  • getElementsByClassName
  • querySelector
  • querySelectorAll

10. 添加节点操作

详细地址

  • appendChild 节点内部末尾位置
  • insertBefore 可以插入节点内部的任何位置
  • replaceChild
  • cloneNode 通过传参可以拷贝内部节点,也可以不拷贝内部节点
  • normalize 移除空的文本节点,并连接相邻的文本节点。
  • splitText splitText方法可以根据指定的偏移量将一个文本节点分割成前后两个独立的兄弟节点

11. 删除节点

  • removeChild
  • removeNode
  • innerHTML
  • deleteContents
  • textContent

第 9 章 DOM 的增删改查的更多相关文章

  1. JavaScript之DOM的增删改查

    JavaScript的组成: 1. ECMAScript-语法规范 2. Web APIs(浏览器提供的工具) (1).BOM (浏览器对象模型) (2).DOM (文档对象模型) 今天就来讲讲DOM ...

  2. JavaScript(JS)之Javascript对象DOM之增删改查(四)

    创建节点:var ele_a = document.createElement('a');添加节点:ele_parent.appendChild(ele_img);删除节点:ele_parent.re ...

  3. JS DOM节点增删改查 属性设置

    一.节点操作 增 createElement(name)创建元素 appendChild();将元素添加   删 获得要删除的元素 获得它的父元素 使用removeChild()方法删除 改 第一种方 ...

  4. MariaDB第二章:基本增删改查

    MariaDB 数据类型 MariaDB数据类型可以分为数字,日期和时间以及字符串值. 使用数据类型的原则:够用就行, 尽量使用范围小的,而不用大的 常用的数据类型 整数:int, bit 小数:de ...

  5. DOM节点的增删改查

    在开始展开DOM操作前,首先需要构建一棵DOM树. <!DOCTYPE html> <html lang="en"> <head> <me ...

  6. js中script的上下放置区别 , Dom的增删改创建

    回顾 javascript分为三部分: 1.ECMAScript5.0 es6(阮一峰) es7 es8 es6中有类的概念 声明变量 var let(es6中语法) 内置函数 Date Math.r ...

  7. 使用DOM进行xml文档的crud(增删改查)操作<操作详解>

    很多朋友对DOM有感冒,这里我花了一些时间写了一个小小的教程,这个能看懂,会操作了,我相信基于DOM的其它API(如JDOM,DOM4J等)一般不会有什么问题. 后附java代码,也可以下载(可点击这 ...

  8. python全栈开发中级班全程笔记(第二模块、第三章)(员工信息增删改查作业讲解)

    python全栈开发中级班全程笔记 第三章:员工信息增删改查作业代码 作业要求: 员工增删改查表用代码实现一个简单的员工信息增删改查表需求: 1.支持模糊查询,(1.find name ,age fo ...

  9. .NET Core实战项目之CMS 第十五章 各层联动工作实现增删改查业务

    连着两天更新叙述性的文章大家可别以为我转行了!哈哈!今天就继续讲讲我们的.NET Core实战项目之CMS系统的教程吧!这个系列教程拖得太久了,所以今天我就以菜单部分的增删改查为例来讲述下我的项目分层 ...

随机推荐

  1. JPA 不生成外键

    在用jpa这种orm框架时,有时我们实体对象存在关联关系,但实际的业务场景可能不需要用jpa来控制数据库创建数据表之间的关联约束,这时我们就需要消除掉数据库表与表之间的外键关联.但jpa在处理建立外键 ...

  2. Spark学习笔记——数据读取和保存

    spark所支持的文件格式 1.文本文件 在 Spark 中读写文本文件很容易. 当我们将一个文本文件读取为 RDD 时,输入的每一行 都会成为 RDD 的 一个元素. 也可以将多个完整的文本文件一次 ...

  3. 使用UWA GOT优化Unity性能和内存

    优化百科: https://blog.uwa4d.com/archives/Index.html https://blog.uwa4d.com/archives/Introduction_UWAGOT ...

  4. [Android Studio] Using NDK to call OpenCV

    NDK才是Android开发通向超高薪之路.(这句话,似乎四年前有云) 难点在于常用的non-free module (sift and surf) unsw@unsw-UX303UB$ pwd /h ...

  5. java面试(2)--大数据相关

    第一部分.十道海量数据处理面试题 1.海量日志数据,提取出某日访问百度次数最多的那个IP. 首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中.注意到IP是32位的,最多有个2^ ...

  6. Android 集成ShareSDK分享QQ或空间成功后,回调却不执行的原因

    AndroidMainifest.xml中的如箭头所示的id一定要与assets下ShareSDK.xml中配置的QQ的AppId一定要相同. 如下图

  7. Python代码统计工具

    目录 Python代码统计工具 声明 一. 问题提出 二. 代码实现 三. 效果验证 Python代码统计工具 标签: Python 代码统计 声明 本文将对<Python实现C代码统计工具(一 ...

  8. 10.21CRM项目(01)

    2018-10-21 13:35:19 crm第一天!放上初始源码! 后面等做完最后一天的手放上所有源码! 越努力越幸运!永远不要高估自己! 注意 多层for循环的时候,切记,不要名字重复!啦!!!! ...

  9. Mysql 全文搜索 Match Against用法

    全文检索在 MySQL 中就是一个 FULLTEXT 类型索引.FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE 时或之后使用 ALTER TABLE 或 CREATE ...

  10. Android源码服务专家(申明:来源于网络)

    Android源码服务专家(申明:来源于网络) 地址:http://www.javaapk.com/topics/demo/page/20/