zoukankan      html  css  js  c++  java
  • DOM操作

    节点-node

    DOM1级定义了一个Node接口,该接口将由DOM中的所有节点类型实现。

    这个Node接口在js中是作为Node类型实现的;除IE,其他all浏览器都能访问到这个类型。ie中数字?

    js中all节点类型都继承自Node类型,so all节点类型共享着相同的基本属性和方法。

    nodeType

    每个节点都有 nodeType 只读

    用数字可以兼容IE(只识别数字)和标准浏览器

         元素 :1

      属性:2

      文本:3

      注释:8

      文档:9 

      ……

    nodeName 属性

    nodeName 属性规定节点的名称。

    • nodeName 是只读的
    • 元素节点的 nodeName 与标签名相同
    • 属性节点的 nodeName 与属性名相同
    • 文本节点的 nodeName 始终是 #text
    • 文档节点的 nodeName 始终是 #document
    • 注释:nodeName 始终包含 HTML 元素的大写字母标签名。

      nodeValue 属性

      nodeValue 属性规定节点的值。

    • 元素节点的 nodeValue 是 undefined 或 null
    • 文本节点的 nodeValue 是文本本身
    • 属性节点的 nodeValue 是属性值

      节点关系

    • all节点都有一个childNodes属性:parentNode:all节点都有
      • 其中保存着一个nodeList对象--类数组对象:保存一组有序节点,可通过位置访问这些节点,如nodeList[0]
      • 由length属性,但不是Array的实例。……高程p249 动态性、转数组方法、IE8之前不兼容
    • 同胞节点:nextSibling previousSibling:childNodes列表中每个节点间互相是同胞节点     若没有则是null
    • firstChild lastChild        同childNode[0]  childNode[...length-1]          

    !!!注意: 节点类型不只是由元素类型,还有属性节点、文本节点等 所以childnode  nextSibling previousSibling 等不一定只是元素节点

    例:

    <div id="div1">
    <span id="span1"></span>
    <span id="span2"></span>
    </div>

    <script>
    var div1=document.getElementById("div1");
    var span1=document.getElementById("span1");
    var span2=document.getElementById("span2");

    console.log(div1.childNodes);

    </script>

    如果内容是用js拼接的可以规避无用空文本节点,静态和HTML经常有空文本。

    如何规避?

    DOM操作

    appendChild()   

    用法:someNode.appendChild(newNode)

    如果出传入到appendChild()的节点已经是文档的一部分了,那结果就是将该节点从原来的位置转移到新位置。相当于剪切

    insertBefore()

    用法:someNode.insertBefore(newNode,refeNode)//若refeNode=null 则功能同appendChild()

    以上两种方法只插入节点(或移动)不会移除,下面两个方法移除。

    replaceChild()

    用法:someNode.replaceChild(newNode,oldNode)

    被替换的节点将由这个方法返回,并从文档树中被移除。仍然还在文档中,但是在文档中没了自己的位置。

    removeChild() :被移除的节点将成为方法的返回值。

    即使可以将DOM树看成是由一系列指针连接起来的,但任何DOM节点也不可能同时出现在文档中的多个位置。

    其他方法
    cloneNode()   新节点 游离在文档中

    深复制cloneNode(true) 复制节点 及整个子节点树

    浅复制cloneNode(false)只复制节点本身 

  • 相关阅读:
    make -j 8参数的作用
    使用请求头认证来测试需要授权的 API 接口
    查看Linux系统的平均负载
    服务器负载均衡的基本功能和实现原理
    Oracle RAC学习笔记:基本概念及入门
    详解物化视图(汇总比较有用的资料)
    程序优化注意的一些点
    PR 审批界面增加显示项方法
    Most Common Solutions to FRM-41839 and .tmp Files Not Being Deleted
    APPCORE Routine APIs
  • 原文地址:https://www.cnblogs.com/everwangJS/p/4499890.html
Copyright © 2011-2022 走看看