1.0   DOM结构

1.1先来看结构图:

父节点
        兄弟节点
        当前节点
            属性节点
            子节点
        兄弟节点
一般任意一个节点我们都会从父节点,子节点,以及兄弟节点的角度去考察。节点一般我们只需关注元素节点,属性节点及文本节点即可。

1.2  节点的相关属性(只读的)

1.2.1 nodeType  属性规定节点的
        nodeType = 1  元素节点   记住
        nodeType = 2  属性节点   记住
        nodeType = 3  文本节点   记住
        nodeType = 8  注释节点
        nodeType = 9  文档
        nodeType = 11   document.fragment
 
1.2.2 nodeName 属性规定节点的名称
 
         元素节点  nodeName = 标签的名称
         console.log(elementNode.nodeName);          //会将标签名大写打印出来
         文本节点  nodeName = #text
        console.log(textNode.nodeName);   //#text
        属性节点  nodeName = 属性的名称
        console.log(attrNode.nodeName);   //attr name
 
1.2.3  nodeValue 属性规定节点的值。
 
        元素节点  nodeValue =  null;
        文本节点  nodeValue = 文本的内容
        属性节点  nodeValue = 属性的值
           

2.0DOM操作增删改查

2.1. 查询

就是获取元素

  1. 标准 DOM API

    • doucment.getElementById
    • document.getElementsByTagName
    • document.getElementsByName
    • document.getElementsByClassName
    • document.querySelectorAll
  2. 亲属访问
  3. 属性获取
    • getAttribute
    • getAttributeNode

2.2. 增加

  1. 创建

    • document.createEelement 创建元素节点
    • document.createTextNode 创建文本节点
    • doucment.createAttribute 属性节点
    • innerHTML
    • innerText
    • cloneNode()
  2. 加入
    • appendChild 追加到结尾处
    • innerHTML
    • insertBefore 用法?将元素插入到某一个元素的前面
      父元素.insertBefore( 新元素, 旧元素 );
      // 将 新元素 插入到 旧元素 的前面
  3. 其他
    • style 的操作
    • setAttribute( 属性名, 属性值 )

2.3. 删除

  1. 删除元素

    • removeChild
    • removeAttributeNode

2.4 修改

  1. 修改节点

    • 删除节点再加入
  2. 修改样式
    • style.xxx = vvv;
    • setAttribute
  3. 修改文本
    • innerHTML
    • innerText
    • 节点操作
    • nodeValue
  4. 修改属性
    • .xxx = vvv
    • setAttribute修改属性
    • replaceChild()

3对于不同DOM节点的操作总结

虽然上面也全面的总结了相关的操作,但其实在查询使用时我更喜欢根据节点的NodeType来操作,因此对于属性节点和元素节点的常见操作分别归纳了一下

3.1元素节点

3.1.1  添加 (先创建再添加)

  创建

    document.createEelement()    创建元素节点

  当然使用 innerHTML,cloneChild的方法也能实现创建元素的目的

   加入
      * appendChild    追加到结尾处
      * innerHTML
      * insertBefore

3.1.2  删除元素

  最常用得当然是removeChild () ;

关于删除子元素:

     // 从 node 中删除 一个 div
       node.removeChild( divDOM );
      // 假设 node 节点中只有一个元素 div
       node.innerHTML = '';

3.1.3修改节点 一般都是删除再加入,即removeChild+appendChild,也可以使用replaceChild() 直接替换

先总结这些,其实DOM的方法虽然多,但好在常用的很少见,希望大家可以在理解DOM结构的基础上熟练操作DOM的apl。

3.2 元素节点

3.2.1 添加属性

doucment.createAttribute()  创建属性节点

使用 setAttribute 添加属性
        // 添加自定义, 非标准的属性 ( DOM-Core )

    div.setAttribute( 'attrName', 'attrValue' );
    使用 .xxx = vvv利用对象的动态特性添加属性 
        // 添加的标准属性( HTML-DOM )
                div.attrName = 'attrValue';
    第三种( 了解 )使用 DOM 节点方法
        // 纯 DOM-Core 的做法
                var attrNode = document.createAttribute( 'test' );//创建属性节点对象
                attr.nodeValue = '测试';  //设置属性值
                div.setAttributeNode( attrNode );   //添加给div
    区别
        div.setAttributeNode(attrnode对象)
        div.setAttribute('属性名','属性值‘);

3.2.2 删除
        removeAttribute(’属性名’)
        removeArrtibuteNode(节点对象名)

    //removeAttribute 是 为了 简化node.removeAttribute( '属性名' ),不用先获取属性节点再删除,而是直接操作元素节点;

3.33   获取
    getAttribute('属性名 ')  获取属性值  //简化了node.getAttributeNode( '属性名' );

getAttributeNode('属性名')  获取属性节点对象

// var attrNode = node.getAttributeNode( '属性名' );
  // attrNode.nodeValue;

 

  

混淆篇之原生DOM操作方法小结的更多相关文章

  1. 原生DOM操作方法小结

    1.0   DOM结构 父节点 兄弟节点 当前节点 属性节点 子节点 兄弟节点 一般任意一个节点我们都会从父节点,子节点,以及兄弟节点的角度去考察.节点一般我们只需关注元素节点,属性节点及文本节点即可 ...

  2. javascript原生dom操作方法

    一.节点层次属性 考虑空白符的相关层次关系属性: 1.childNodes属性 包含 2.parentNode属性 3.previouseSibling属性和nextSibling属性 4.first ...

  3. JQ对象和原生DOM对象

    相同点:两者本质上都是DOM元素. 不同点:JQ对象是在原生DOM对象上进行了一次封装,使开发人员使用起来更简洁.高效. 两者之间用法也完全不同,很说初学者经常混淆. 其实区分两者并不难, 1.语法不 ...

  4. ubuntu下apache服务器操作方法小结,具有参考借鉴价值

    这篇文章主要介绍了ubuntu下apache服务器操作方法小结,非常不错,具有参考借鉴价值,需要的朋友可以参考下(http://www.0831jl.com)Linux系统为Ubuntu 一.Star ...

  5. [react] 什么是虚拟dom?虚拟dom比操作原生dom要快吗?虚拟dom是如何转变成真实dom并渲染到页面的?

    壹 ❀ 引 虚拟DOM(Virtual DOM)在前端领域也算是老生常谈的话题了,若你了解过vue或者react一定避不开这个话题,因此虚拟DOM也算是面试中常问的一个点,那么通过本文,你将了解到如下 ...

  6. iOS开发UI篇—UITableview控件使用小结

    iOS开发UI篇—UITableview控件使用小结 一.UITableview的使用步骤 UITableview的使用就只有简单的三个步骤: 1.告诉一共有多少组数据 方法:- (NSInteger ...

  7. 原生DOM探究 -- NodeList v.s. HTMLCollection

    涉及获取元素的主要API 在获取原生DOM元素的时候,主要涉及这几个DOM API(链接为Living Standard): Node及对应集合NodeList Element(继承Node)及对应集 ...

  8. SWF加解密资源索引之加密混淆篇【转】

    ============================ SWF加解密资源索引之加密混淆篇 ============================ [心得] swf加密混淆器(带源码) http:/ ...

  9. 原生DOM操作vs框架虚拟DOM比较

    1. 原生 DOM 操作 vs. 通过框架封装操作. 这是一个性能 vs. 可维护性的取舍.框架的意义在于为你掩盖底层的 DOM 操作,让你用更声明式的方式来描述你的目的,从而让你的代码更容易维护.没 ...

随机推荐

  1. JS页面赋值

    <html>  <title>页面1</title> <div> <ul>  <li> <div class=" ...

  2. python基础教程_学习笔记14:标准库:一些最爱——re

    标准库:一些最爱 re re模块包括对正則表達式的支持,由于以前系统学习过正則表達式,所以基础内容略过,直接看python对于正則表達式的支持. 正則表達式的学习,见<Mastering Reg ...

  3. C#中List和数组之间的转换

    一.List转数组 (从List<string>转到string[])   C# 代码   复制 List<string> listS=new List<string&g ...

  4. C# C++ Java接口类型转换

    最近这几天做了一个兼职 ,主要是把C语言以及C#语言封装的dll,经过C++中转为Java语言支持的,主要其中的问题就是类型转换,在此列出常用类型的转换过程. #include "stdaf ...

  5. Spring与Mybatis配置问题

    Spring和Mybatis的整合,主要借助于Spring的依赖注入和控制反转来简化Mybatis的配置,使用两个配置文件[注:此种配置文件网上已经有很多]: spring.xml: <?xml ...

  6. Java之线程的生命周期

    在Java中,线程有5中不同状态,分别是:新建(New).就绪(Runable).运行(Running).阻塞(Blocked)和死亡(Dead).它们之间的转换图如下: 上图有一个例外,调用yiel ...

  7. 使用Task简化Silverlight调用Wcf

    原文http://www.cnblogs.com/lemontea/archive/2012/12/09/2810549.html 从.Net4.0开始,.Net提供了一个Task类来封装一个异步操作 ...

  8. python发布与共享

    1.新建.py文件,并将代码拷贝到.py文件中 def listItems(items): for item in items : if isinstance(item,list): listItem ...

  9. PS快捷键大全

    一.工具箱(多种工具共用一个快捷键的可同时按[Shift]加此快捷键选取)  矩形.椭圆选框工具 [M]  移动工具 [V]  套索.多边形套索.磁性套索 [L]  魔棒工具 [W]  裁剪工具 [C ...

  10. ubuntu 设置网卡为混杂模式 以及网络配置命令

    1. ifconfig eth0 promisc 设置eth0为混杂模式. ifconfig eth0 -promisc 取消它的混杂模式 botnet@botnet-virtual-machine: ...