DOM(Document Object Model),即文档对象模型。DOM是针对HTML和XML文档的一个API,它描绘了一个层次化的节点树,允许开发人员添加、移除和修改页面的某一部分。在定义方面,我理解得尚不是非常透彻。但DOM树是前端工程师在学习javascript过程中非常重要的一部分,所以今天且把一些我最近常用到的内容总结一下吧。

  1、元素节点方法

    通过ID获取元素节点:document.getElementById();

    通过标签名获取元素节点:document.getElementByTagName();

    通过名字获取获取元素节点:document.getElementByName();   

    获取节点属性:getAttribute(属性名);    

    设置节点属性:setAttribute(属性名,属性值);

    删除节点属性:removeAttribute(属性名);

  2、节点属性

 

  注意:

  1、在使用childnodes获取子节点时,换行符(不可见)也会当作一个子节点,且nodeType等于3;

  2、当获取body的childnodes时,若</body>闭标签后面插入了<script></script>标签,浏览器(包括FF、IE和chrome等)在渲染DOM树的时候,会把<script>节点渲染成<body>的子节点。

  注意,当在<head></head>标签内插入<script></script>时则不会导致这种情况。为了搞清楚这个问题,我找来了DOM树的结构图。我的理解是,因为DOM树的根部结构都是固定为DOCUMENT->HTML->HEAD和BODY的,而浏览器在渲染时为了遵循这种规则,就统一把body后面的script解析到body内部。也就是说浏览器将script渲染成body的子节点,不然若把script直接渲染成html的子节点的话,就会破坏DOM树的标准结构。也就是说,浏览器之所以这样做是为了规范以及标准,因为script标签原则上是放在head或body内部的。所以不推荐大家把javascript代码置在body之后,这是一种不规范的做法。

    

  3、节点关系

    childNodes:所有子节点(包含换行符空格

    children:所有是标签类型的子节点(直接子节点不包括孙子等)

    parentNode:父节点

    nextSibling:下一个兄弟节点(记得去换行符空格

    previousSibling:上一个兄弟节点

    firstChild : 第一个子节点

    lastChild:最后一个子节点

  注意:使用后四个关系(即next、previous、first和last)获取节点时,在IE下会存在写法上的差异,所以我们在使用时常常要写兼容性方法

  //兼容IE的方法

 function fnNext(obj){   //下一个兄弟节点
return obj.nextElementSibling ? obj.nextElementSibling : obj.nextSibling;
} function fnpre( obj ){ //上一个兄弟节点
return obj.previousElementSibling ? obj.previousElementSibling : obj.previousSibling;
} function fnFirst(obj){ //第一个子节点
return obj.firstElementChild ? obj.firstElementChild : obj.firstChild;
} function fnLast(obj){ //最后一个子节点
return obj.lastElementChild ? obj.lastElementChild : obj.lastChild;
}

  4、获取元素尺寸和位置

    获取内联样式的宽高:Element.style.width/height  (只能获取写在标签style内的样式)

    获取可视区域大小:clientWidth/clientHeight (包括padding,但不包括margin和border)

    获取元素实际大小:offsetWidth/offsetHeight (包括border、内填充和滚动条,但不包括margin)

    获取定位父节点:offsetParent (相对定位的父容器,定位不一定根据父节点)

    获取相对位置:offsetLeft/Top/Right/Bottom(相对于父定位容器的位置)

  注意:在offsetParent 中,如果本身父元素是<body>,非IE 返回body 对象,IE 返回html 对象。(IE总是那么我行我素, ̄□ ̄||)

  5、获取应用样式

    比较少用,以下两个我都没有用过,这里仅作为拓展认识。

    currentStyle:ie所支持的获取非行间样式的方法

    用法:对象.currentStyle.样式名

    例:oDiv.currentStyle.width

    getComputedStyle:非ie所支持的获取非行间样式的方法

    用法:getComputedStyle(对象,伪类).样式名

    例:getComputedStyle(oDiv,null).color

  6、操作节点方法

    createElement("标签名") : 创建新元素;

    createTextNode("") : 创建文本节点;

      创建方法:document.createElement('div');

    appendChild(node) : 向childNodes末尾插入一个节点node

    insertBefore(node,targetNode) : 向targetNode之前插入节点node

    replaceChild(newNode,oldNode) : newNode替换节点oldNode

    removeChild(node) : 移除父节点的某个子节点

 PS:下一篇会写到DOM应用的实例,灵活使用DOM的节点操作方法,是一个很强大的功能。

学习总结——DOM的更多相关文章

  1. html学习笔记-DOM

    html学习笔记-DOM Table of Contents 1. 什么是 DOM? 2. DOM 节点 3. DOM 方法 4. DOM 属性 5. DOM 访问 6. DOM 修改 7. DOM ...

  2. 原生js学习 选择dom

    连bootstrap5 都抛弃jquery了,重新使用原生js来写,所以最近在学习原生js. 一.选择dom元素: id let sure=document.getElementById('sure' ...

  3. js学习笔记--dom部分(一)

    js 学习整理之Dom部分 前面我总结了我最近学习js基础部分,当时提到过js分了三大部分,第一部分ECMA基础也就是第一次写的基础部分, 第二部分也就是DOM部分,也就是这里要写的内容的,然后第三部 ...

  4. javascript基础学习系列-DOM盒子模型常用属性

    最近在学习DOM盒子模型,各种属性看着眼花缭乱,下面根据三个系列来分别介绍一下: client系列 clientWidth :width+(padding-left)+(padding-right)— ...

  5. javascript基础学习--HTML DOM

    写在前面的话:由于学校没有开过javascript这门课,所以平时用javascript时都是用到什么就去搜什么样的代码,但是在工作中有时候搜来的代码总是有那么点小问题,而当自己想去修改时,却又无从下 ...

  6. Vue.js_础学习之DOM操作

    demo说明: 1.{{message}}                           --“Mustache” 语法(双大括号) 2.v-bind:属性名                   ...

  7. 轻松学习JavaScript十八:DOM编程学习之DOM简单介绍

    一DOM概述 DOM(文档对象模型)是HTML和XML的应用程序接口(API).DOM将把整个页面规划成由节点层级构成的文档. DOM描绘了一个层次化的节点树,执行开发者加入,移除和改动页面的某一部分 ...

  8. 学习WEBAPI(DOM)第二天

    目录 第二天学习目标: 一.阻止超链接的默认跳转行为 二.鼠标进入事件和鼠标离开事件 三.根据name属性值获取元素==>表单标签,返回的是伪数组 四.根据类样式的名字来获取元素,返回的是伪数组 ...

  9. Javascript学习,DOM对象,方法的使用

    JavaScript: ECMAScript: BOM: DOM: 事件 DOM的简单学习 功能:控制html文档内容 代码:获取页面标签(元素)对象和Element document.getElem ...

随机推荐

  1. 250W电源带i7+GTX1080?

    电源的科学: Q1:电源的额定功率是什么?峰值功率又是什么?A1:电源的额定功率就是电源正常工作时的功率,它的值为用电器的额定电压乘以额定电流.而峰值功率指的是电源短时间内能达到的最大功率, 一般情况 ...

  2. 表格CSS样式美化

    1. 单像素边框CSS表格 这是一个很常用的表格样式. <!-- CSS goes in the document HEAD or added to your external styleshe ...

  3. Maven进价:Maven的安装和目录结构

    一.在windows上安装Maven 1.下载 下载地址:http://maven.apache.org/download.html 下载最新版本 maven3.2.5 2.解压 解压地址:F:\Ja ...

  4. 简单的session共享的封装

    目的 session存储在缓存服务器上(各种缓存服务器上均可,本文以memcached为例),但对开发者来说,他不用关注,只需要调用request.getSession()方法即可获取到session ...

  5. jQuery的maskedinput插件 设置input掩码

    一.下载插件  http://digitalbush.com/projects/masked-input-plugin/二.属性a: 表示只能输入大小写字母9:表示只能输入0-9之间的数字*:a和9的 ...

  6. Sapi 添加语法的文章(转载)

    最近在做SAPI方面的工作,比较详细的中文资料不多,遇到各种问题,本来想着做完了项目总结一下,今天看到这篇文章,对于SAPI加载识别语法方面的描述十分详细,先转过来做个备份,谢谢原文博主:djyang ...

  7. UNIQUEIDENTIFIER列上的统计信息

    UNIQUEIDENTIFIER列上的统计信息非常有意思,在它上面有一些很令人讨厌的行为.我们来看下. 问题重现(The repro) 为了向你展示我们刚抱怨的行为,我用下列简单的表定义创建了一个数据 ...

  8. python之IO多路复用

    在python的网络编程里,socetserver是个重要的内置模块,其在内部其实就是利用了I/O多路复用.多线程和多进程技术,实现了并发通信.与多进程和多线程相比,I/O多路复用的系统开销小,系统不 ...

  9. 2013/11/22工作随笔-缓存是放在Model层还是放在Controller层

    web网站的典型代码框架就是MVC架构,Model层负责数据获取,Controller层负责逻辑控制,View层则负责展示. 一般数据获取是去mysql中获取数据 但是这里有个问题,我们不会每次请求都 ...

  10. 0527Sprint总结,读书笔记与提问

    第八章主要软件团队如何准确全面的找到人们对于软件五花八门的需求,主要有以下几个步骤: 1.获取和引导需求 2.分析和定义需求 3.验证需求 4.在软件产品的生命周期中管理需求 . 接下来讲了软件产品的 ...