一、DOM概念

  1、DOM:Document Object Model  文档对象模型

    (1) 文档:html页面;

    (2) 文档对象:页面中的元素;

    (3) 文档对象模型:代表的是一套准则、标准,是WC3组织定义的;为了能够让程序(js)去操作页面中的元素,定义出来的一套标准

  2、DMO定义:

    DOM为了能够更方便的定义和操作页面中的元素,首先会把当前整个页面看作成一个竖状结构,也就是说DOM会把文档看作是一棵树,同时定义了很多方法来操作这棵树中的每一个元素,我们称之为DOM节点

二、DOM的节点类型   (总共有12种)

  1、最常用的是:元素节点:返回1

           属性节点:返回2

           文本节点:返回3

  2、元素.nodeType:只读属性

    作用:可以获得当前元素的节点类型

    alert(元素.nodeType)

三、属性

(一)获取父级下的子节点

  1、元素.childNodes   只读属性  子节点列表的集合

    兼容:标准下:包含了文本和元素类型的节点,并且也会包含非法嵌套的子节点;

       非标准下:只包含元素类型的节点,IE7以下不会包含非法嵌套子节点;

    需要注意的是:childNodes只包含一级子节点,不包含后辈孙级以下的节点

    alert(元素.childNodes[0].nodeType);     // 通过nodeType可以查看当前元素的节点类型

  2、元素.children:只读属性   子节点列表的集合

    a : 标准下和非标准下:只包含元素类型的节点

    b : 用法与childNodes相同,只是说childNodes是存在兼容问题的

  3、元素.attributes:只读属性  属性列表集合

    alert(元素.attributes.length);        // 元素属性的个数

    alert(元素.attributes[0]);            // object attr  属性对象

    alert(元素.attributes[0].name);       // 获得当前属性的名称

    alert(元素.attributes[0].value);      // 获得当前属性的值

    alert(元素.attributes[0].nodeType);   // 可以通过nodeType查看节点类型:属性节点 返回2

(二)获取元素的子节点: (用法都是一样的)

  1、获取元素下第一个子节点

    (1) 元素.firstChild:只读属性 (非标准下获取第一个元素类型的子节点)

      标准下:firstChild会包含文本类型的节点

      非标准下:只包含元素节点

    (2) 元素.firstElementChild:只读属性  (标准下获取第一个元素类型的子节点)

      标准下:包含元素节点

      非标准下:undefined

    (3) 想要做到兼容,可以这样写:

      var oFirst = oUl.firstElementChild || oUl.firstChild;

    (4) 想要获取元素的第一个子节点,可以用children[0]的方法找到第一个元素

  2、获取元素的最后一个子节点:

    (1) 元素.lastChild

    (2) 元素.lastElementChild

    (3) 想要做到兼容,可以这样写:

      var oLast = oUl.lastElementChild || oUl.lastChild;

  3、获取元素的下一个兄弟节点:

    (1)元素.nextSibling

    (2)元素.nextElementSibling

  4、获取元素的上一个兄弟节点:

    (1)元素.previousSibling

    (2)元素.previousElementSibling

(三)获取父节点

  1、元素.parentNode: 只读属性,父节点,只有一个,没有兼容问题

  2、元素.offsetParent: 只读属性,离当前元素最近的一个有定位属性的父节点

    需注意的问题:

      (1)如果没有定位父级,默认指向body。 ( offsetParent —> body )

      (2)IE7以下,如果当前元素没有定位默认指向body,有定位则指向的是html

      实例:

      #div3{background:red;position:relative;}  // 当前元素设置了定位

      alert(oDiv3.offsetParent.tagName);   // 当前oDiv3在css样式中设置了定位,那么在JS中offsetParent就会指向html

      (3)IE7以下,如果当前元素的某个父级触发了layout,那么offsetParent就会被指向到这个触发了layout特性的父节点上

  3、offsetLeft、offsetTop

    元素.offsetLeft[top]:只读属性,当前元素到定位父级(offsetParent)的距离(也叫偏移值)。

    需注意的问题:

      (1) 如果没有定位父级:

      offsetLeft —> html

      (2) 如果有定位父级:

       IE7以下:    如果当前元素也有定位,那么就是到定位父级的距离,如果当前元素没有定位,那么就是到body的距离(要想得到兼容,当前元素必须有定位)

      其他浏览器: 到定位父级的距离

  4、width、height 取值

    (1) style.width:样式宽  

    (2) clientWidth:可视区宽(样式宽+padding)

    (3) offsetWidth:占位宽(可视区宽+边框)

四、DOM方法

(一)操作特性的DOM方法

  1、元素.getAttribute(属性名称); 获取指定元素的指定属性的值

    需要注意的是:

    alert(oImg.getAttribute('src'));   // 在ie7下获取图片的src还是会返回资源的绝对路径,而标准浏览器返回的是相对路径

  2、元素.setAttribute(属性名称); 给指定元素指定的属性设置值,两个参数

    实例:

    oText.setAttribute( 'value', 'hello' );   // 给value属性设置了'hello'值

  3、元素.removeAttribute(属性名称); 移除指定元素的指定的属性

(二)创建元素

  父级.createElement(要创建元素的标签名)    

(三)操作动态创建出来的节点

  1、添加到页面中:

    (1) 父级.appendChild();   追加子元素

    (2) 父级.insertBefore(新的元素,被插入的元素);   在指定元素前面插入一个新元素

      实例:

        oUl.insertBefore(oLi,oUl.children[0]);

      存在问题:

        a:在ie下如果第二个参数的节点不存在,会报错;

        b:在其他标准浏览器下,如果第二个参数的节点不存在,则会以appendChild的形式进行添加

      解决方案:

        if(oUl.children[0]){
                    oUl.insertBefore(oLi,oUl.children[0]);
                }else{
                    oUl.appendChild(oLi);
                }

  2、替换子节点

    父级.replaceChild(新节点,被替换节点)

  3、删除元素

    父级.removeChild(要删除的元素);

五、操作表格的属性和方法

  tHead:表格头

  tBodies:表格正文

  tFoot:表格尾

  rows:行

  cells:列

六、表单操作

  1、可以根据name的值选中当前的表单元素:(每一个表单元素都有name这个属性)

  2、onchange事件  当值发生改变的时候触发

    (1) 格式:oForm.text1.onchange = function (){ };     // text1 是 name 的值

    (2) input表单:

      text(文本框):当光标离开的时候如果有内容就会触发;

      radio/checkbox:标准下点击的时候只要值变了,那么就会触发;

                非标准下焦点离开的时候如果值变了,就会触发;

      select:只要选中下拉选项就会触发

  3、表单事件

    (1) onsubmit:  事件 当提交表单的时候触发

    (2) onreset: 事件  当提交表单重置的时候触发

DOM总结的更多相关文章

  1. 关于DOM的操作以及性能优化问题-重绘重排

     写在前面: 大家都知道DOM的操作很昂贵. 然后贵在什么地方呢? 一.访问DOM元素 二.修改DOM引起的重绘重排 一.访问DOM 像书上的比喻:把DOM和JavaScript(这里指ECMScri ...

  2. 读书笔记:JavaScript DOM 编程艺术(第二版)

    读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...

  3. 页面嵌入dom与被嵌入iframe的攻防

    1.情景一:自己的页面被引入(嵌入)至别人的页面iframe中 if(window.self != window.top){ //url是自己页面的url window.top.location.hr ...

  4. 通俗易懂的来讲讲DOM

    DOM是所有前端开发每天打交道的东西,但是随着jQuery等库的出现,大大简化了DOM操作,导致大家慢慢的“遗忘”了它的本来面貌.不过,要想深入学习前端知识,对DOM的了解是不可或缺的,所以本文力图系 ...

  5. HTML DOM 介绍

    本篇主要介绍DOM内容.DOM 节点.节点属性以及获取HTML元素的方法. 目录 1. 介绍 DOM:介绍DOM,以及对DOM分类和功能的说明. 2. DOM 节点:介绍DOM节点分类和节点层次. 3 ...

  6. HTML DOM 对象

    本篇主要介绍HTML DOM 对象:Document.Element.Attr.Event等4个对象. 目录 1. Document 对象:表示文档树的根节点,大部分属性和方法都是对元素进行操作. 2 ...

  7. 重撸js_2_基础dom操作

    1.node 方法 返回 含义 nodeName String 获取节点名称 nodeType Number 获取节点类型 nodeValue String 节点的值(注意:文本也是节点) 2.inn ...

  8. 虚拟dom与diff算法 分析

    好文集合: 深入浅出React(四):虚拟DOM Diff算法解析 全面理解虚拟DOM,实现虚拟DOM

  9. 窥探Vue.js 2.0 - Virtual DOM到底是个什么鬼?

    引言 你可能听说在Vue.js 2.0已经发布,并且在其中新添加如了一些新功能.其中一个功能就是"Virtual DOM". Virtual DOM是什么 在之前,React和Em ...

  10. jQuery学习之路(2)-DOM操作

    ▓▓▓▓▓▓ 大致介绍 jQuery作为JavaScript库,继承并发扬了JavaScript对DOM对象操作的特性,使开发人员能方便的操作DOM对象. ▓▓▓▓▓▓ jQuery中的DOM操作 看 ...

随机推荐

  1. Spring创建对象的方式3种方式

    此文为基础回顾,估计是最后一次总结. 项目利用maven进行架构,其基本项目结构为: 其中pom.xml中的内容为: <project xmlns="http://maven.apac ...

  2. n个List<Map>合并,Map中某属性值相等的value值相加

    List<Map> maps1 =[{"bigtypes":100,"num":400},{"bigtypes":200,&qu ...

  3. decoder3_8

    这两天回归书本,继续阅读书上的内容,此时的体会与刚开始学那会的体会是不一样的,比如3_8decoder,之前就认为可以用case来写,而书上有一种更简便的方式来描述,带给你新的思路,既然有新方式可以描 ...

  4. 多个inline元素、block元素、inline-block元素在父容器中的换行情况

    1.首先看inine元素的换行情况 <style> *{padding:0;margin:0} div.wrap{width:200px;height:200px;border:1px s ...

  5. eclipse shortcut binding

    有些真的是太方便了,我竟然不知道,比如ctrl + h 就是打开search 功能,包括file search,我竟然每次都点击工具条上的放大镜图标! use Ctrl+Shift+T for ope ...

  6. Hibernate与IBatis的优缺点及可行性分析

    以下文章来源于考试大 1.优点 简单: 易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现. 实用: 提供了数据映射功能,提供了对底层数据访问的封装(例如ado.net),提供 ...

  7. ASer Python学习笔记

    最近又开始学习python了,希望自己能坚持下去. 我看的书是thinkingpython,是在豆瓣的python学习组看到的. 连续看了3,4天左右,然后尝试着写了个小程序,复制文件的,代码如下: ...

  8. Docker - 容器编排工具 compose 之安装

    准备 首先,在使用和安装 docker compose之前,我们应该确保我们已经安装了 docker engine. 安装 官网上面有好多种安装方式,由于我们现在是在使用Docker, 个人感觉应该以 ...

  9. Mariadb galera 群集

    环境:  CentOS 7 x64  *  3 IP : 192.168.0.100 IP : 192.168.0.101 IP : 192.168.0.102 配置mariadb YUM 源 htt ...

  10. LWIP_STM32_ENC28J60_NETCONN_TCP_SERVICER(5)

    前面说了TCP客户端通讯,这一篇来说说单片机作为服务器的通讯方法 tcp客户端和服务器的链接做大的不同在于服务器是不需要主动链接谁的,他只需要绑定在自己得一个特定的端口之上,等别人来连接就好了,先创建 ...