DOM操作 —— 如何添加、移除、移动、复制、创建和查找节点等

如何添加、移除、移动、复制、创建和查找节点?


  1. 创建节点
1.1 创建元素节点:createElement()
  栗子: var p = document.createElement("p");
         p.nodeType;//1
1.2 创建文本节点: createTextNode()
  栗子:var textNode = document.createTextNode("I am text node");
        textNode.nodeType;//3
1.3 文本节点的合并:normalize()
    在父节点调用,父节点的两个相邻的文本子节点会合成一个文本节点。
1.4 文本节点的分割:splitText(参数)
    参数为一个以0开始的文本下标索引。以此分割,参数左为一个文本节点,参数及右为另一个文本节点。
1.5 ->1.3和1.4的栗子:
    var p = document.createElement("p");
    var textNode = document.createTextNode("I am text node");
//appendChild()
    p.appendChild(textNode);
//分割
    var newTextNode = p.firstChild.splitText(5);
    p.firstChild.nodeValue;//"I am "
    p.lastChild.nodeValue;//"text node"
    newTextNode.nodeValue;//"text node"
//合并
  p.normalize();
  p.firstChild.nodeValue;//"I am text node"
  1. 添加节点
2.1 向父节点的childNodes的末尾添加子节点:appendChild(nodeInsert)
  若添加的节点已存在childNodes中,则把该节点转移到末尾来。
  栗子见1.5
2.2 向父节点的childNodes的其他子节点前插入子节点:insertBefore(nodeInsert, nodeExist);
  当第二个参数为null时,insertBefore(nodeInsert, null)效果等同appendChild() 
2.3 通过innerHTML属性 添加节点(或者说替换子树)
  栗子: node.innerHTML = "<p>I become node by innerHTML</p>";

  1. 复制节点
3 复制节点 cloneNode(bool)
栗子: nodeA.clone(ture);
  参数为布尔值,参数设为true则进行深复制,会复制nodeA节点及其整个子树;参数为false进行浅复制,只复制nodeA节点;
  ps:cloneNode()并不复制js属性,但IE会复制相关事件处理程序

  1. 替换节点
4 替换节点 replaceChild(newNode, oldNode)
  栗子:oldNode.parentNode.replaceChild(newNode, oldNode);
  1. 移除节点
5 移除节点 removeChild(nodeA)
  栗子:nodeA.parentNode.removeChild(nodeA);
  1. 查找节点-遍历
6 查找结点从某种程度上来说(除了之前介绍的通过DOM的常规属性来找)应该就是遍历了吧
  6.0 NodeIterator类型和TreeWalker类型(“DOM 2级遍历和范围”模块中定义的)
  6.1 NodeIterator
    6.1.1创建:var aNodeIterator = document.createNodeIterator(root,whatToShow, filter, false)
    6.1.2方法:aNodeIterator.nextNode()最先指向root,然后随遍历改变,即向前遍历的前方前进一步
              还有一个preciousNode(),指向遍历的前一个节点。
    6.1.3参数:
    root:遍历开始的根节点
    whatToShow:想要访问的节点类型,如: NodeFilter.SHOW_ELEMENT表示元素节点类型
    filter:一个表示拒绝还是接受的某种节点的函数(例:filterA),或者一个包含acceptNode方法的NodeFilter对象(例:filterB),或者为空(只让whatToShow参数去过滤)。
    filterA:  函数,过滤掉不是标签不是div的所有元素节点
      var filterA = function(node){
        return node.tagName.toLowerCase() == 'div' ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
      }
    filterB: 对象
      var filterB = {
        acceptNode: function(node){
          return node.tagName.toLowerCase() == 'div' ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
        }
      }
  6.2 TreeWalker
    6.2.1创建:var aTreeWalker= document.createTreeWalker(root,whatToShow, filter, false)
    6.2.2和NodeIterator的不同:
      filter返回的NodeFilter.FILTER_REJECT会跳过遍历中之后的整个子树,而在NodeIterator是和NodeFilter.FILTER_SKIP一样跳过当前结点。
      TreeWalker可以通过下列方法在DOM延任何方向移动:
        parentNode()//遍历到当前结点的父节点
        firstChild()
        lastChild()
        nextSibling()
        previousSibling()

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • 第1章 简介 第2章 DOM节点的创建 2-1 DOM创建节点及节点属性 通过JavaScript可以很方便的获...
    mo默22阅读 804评论 0 8
  • 什么是DOM??? DOM(Document Object Model 文档对象模型)是针对HTML和XML文档的...
    荧惑3_3阅读 1,383评论 0 1
  • 终于盼来了星姐的新书《你自以为的极限,只是别人的起点》,这本书里的内容,跟我每天都要看的星姐的公众号《一直特立独行...
    空思我阅读 909评论 0 5
  • 水培干净清爽还能赏根,但很遗憾很多植物不能水培,或者水培的长不茂盛。 传统土培看着不干净不清爽,如何改善观感。 答...
    陈稳阅读 151评论 0 0