JavaScript基础知识点--DOM操作之节点

DOM之节点

  • 添加节点

  • 删除节点

  • 修改节点

  • 查找节点

添加节点

create 系列方法

  • document.creatElement():创建新的元素节点。一个参数,标签名

  • document.createTextNode():创建新的文本节点。一个参数,要插入的节点的文本

  • document.createDocumentFragment():创建文档片段

  • document.createComment():传入一个注释文本,创建一个注释节点

  • node1.appendChild(node2);将node2(节点二)装填到node1(节点1)内。

document.createElement 还能支持创建当前浏览器不支持的标签名,在IE6-8下,这是一个著名的 hack

创建节点示例一

    var newDiv = document.createElement("div"); // 创建元素节点,这句话就是在窗口创建div元素
    var newContent = document.createTextNode("Hi there and greetings!"); // 创建文本节点及其内容
    newDiv.appendChild(newContent); // 将文本节点装填到元素节点内

创建节点示例二

var comment = document.createComment("A comment");
    var fragment = document.createDocumentFragment();
    var ul = document.getElementById("myList");// HTML 文档中ul的id为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);
    // insertBefore 有两个参数,一个是要插入的节点,另一个是插入节点相对的对象,插入节点要插入到哪个对象的前面的对象,这里的第二个参数是ul
    document.body.insertBefore(comment, document.body.firstChild);

IE 浏览器条件编译

    // 如果是IE浏览器,则!!0为假,不return。如果不是IE浏览器,则!0为真,返回并且不执行条件编译后面的代码
    if(!
    /*@cc_on!@/
    0) return;

高效创建节点的方法

  • innerHTML:用来设置或获取当前标签的起始和结束里面的内容

  • outerHTML:返回调用它的元素及所有子节点的 HTML 标签,包含元素自身的标签

  • innerText:设置或获取位于对象起始和结束标签内的文本,低版本火狐浏览器不支持,可用 textContent 方法

使用 innerHTML 的限制

  • 字符串的最左边不能出现空白,IE6~8会自动移除它

  • 大多数浏览器不会对 script 标签进行脚本执行操作

    1. 为 script 标签添加 defer 属性

    2. script 标签要在有作用域的元素之后

  • 不能单独创建 meta,style,link等元素,一定要在前面加上一些字符

避开空白节点

  1. nodeType

  2. 第二套 API

类数组对象

NodeList 对象的特点

NodeList 是 childNodes 的保存的对象

  • NodeList 是一种类数组对象,用于保存一组有序的节点

  • 可以通过方括号语法来访问 NodeList 的值,有 item 方法与 length 属性

  • 它并不是 Array 的实例,没有数组对象的方法

类数组对象 HTMLCollection

  • Ele.getElementsByTagName():会根据节点的名称返回一组元素的集合

  • document.scripts:会返回页面里的全部 script 的集合

  • document.links:会返回页面里的全部 a 元素

  • document.images:会返回页面里的全部 image 元素

  • document.forms:会返回页面里全部的页面表单

  • tr.cells:会返回 tr 的所有 td 子元素的集合

  • select.options:会返回这个 select 属性的全部选项

namedItem()

该方法返回 HTMLCollection 对象中指定 ID 或 name 的元素

语法

HTMLCollection.namedItem(name)

参数说明

name:必需。你要返回元素的 id 或 name 属性的值

类数组对象 NamedNodeMap

主要用于获取属性的属性值

  • Ele.attributes:返回指定节点的属性集合

  • Ele.attributes.getNamedItem(“attributeName”).nodeValue:返回指定的属性节点。attributeName为要查找的属性值的属性名,该方法只能获取在元素上定义的属性值

类数组对象的动态性

  • NodeList,HTMLCollection,NamedNodeMap 三个集合都是动态的,是有生命的、有呼吸的对象

  • 它们实际上是基于 DOM 结构动态执行查询的结果,因此 DOM 结构的变化能够自动反映这些对象

  • 每当文档结构发生变化时,它们都会得到更新。因此,它们始终都会保存着最新、最准确的信息

节点查找方法

  • getElementById()

  • getElementsByName()

  • getElementsTagName()

  • getElementsByClassName()

  • querySelector():返回文档中匹配指定 CSS 选择器的一个元素,括号中写符合 CSS 语法的字符

  • querySeletorAll():返回文档中匹配指定 CSS 选择器的一组元素,括号中写符合 CSS 语法的字符

前三个只能是 document 对象的方法

querySelectorAll() 和 querySelector() 方法返回的是一个静态的 NodeList ,所谓静态 NodeList 就是对底层 document 的更改不会影响到返回的这个 NodeList 对象.此时返回的 NodeList 只是 querySelectorAll() 方法被调用时的文档状态的快照。

操作节点

  • appendChild():为指定元素节点的最后一个子节点之后添加节点。该方法返回新的子节点

  • insertBefore():在指定的已有子节点之前插入新的子节点。该方法返回新创建的节点

  • replaceChild():新节点替换某个子节点。返回被替换的节点

  • cloneNode():创建节点的拷贝,并返回该副本。拷贝的节点要有父节点,如果没有父节点,要通过上面三个方法对其进行添加

  • normalize():合并相邻的文本节点

  • splitText():按照指定的位置把文本节点分割为两个节点。返回分割后新的文本节点

参数说明

方法 参数
appendChild() appendChild(要插入的节点)
insertBefore() insertBefore(要插入的节点,指定的子节点)
replaceChild() replaceChild(要插入的节点,被替换的节点)
cloneNode() cloneNode(boolean),若Boolean为false,则只复制该节点。如果未true,则为深度拷贝,将该节点下的子节点一起拷贝
splitText() splitText(num),节点从num位置被分割,包括num该位置的字符

nodeValue 与 innerHTML 的区别

nodeValue

nodeValue 属性设置或返回指定节点的节点值。(文本节点和属性节点可以用nodeValue)

innerHTML

innerText属性可以获取或者设置指定元素的文本内容

区别

nodeValue 只会读取 element 这个节点的节点值,不包括子节点,而 innerHTML 包括子节点

删除节点

涉及方法

  • removeChild():删除某个节点中指定的子节点。返回被删除的节点

  • removeNode():IE的私有实现。将目标节点从文档中删除,返回目标节点

  • innerHTML

  • deleteContents

  • textContent

参数说明

方法 参数说明
removeChild() 一个参数。为要删除的子节点
removeNode() 一个参数为布尔值,默认值为false。若为false,仅删除目标节点,保留子节点。若为true,功能和removeChild类似
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容

  •   DOM(文档对象模型)是针对 HTML 和 XML 文档的一个 API(应用程序编程接口)。   DOM 描绘...
    霜天晓阅读 3,632评论 0 7
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,113评论 0 21
  • Element 类型 除了 Document 类型之外,Element 类型就要算是 Web 编程中最常用的类型了...
    劼哥stone阅读 626评论 0 3
  • 前言:尽管现在有很多优秀的框架,大大简化了我们的DOM操作,但是我们仍然要学好DOM知识来写原生JS,从根本上去理...
    长鲸向南阅读 1,858评论 0 0
  • 一、JS前言 (1)认识JS 也许你已经了解HTML标记(也称为结构),知道了CSS样式(也称为表示),会使用HT...
    凛0_0阅读 2,763评论 0 8