学习总结——DOM
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的更多相关文章
- html学习笔记-DOM
html学习笔记-DOM Table of Contents 1. 什么是 DOM? 2. DOM 节点 3. DOM 方法 4. DOM 属性 5. DOM 访问 6. DOM 修改 7. DOM ...
- 原生js学习 选择dom
连bootstrap5 都抛弃jquery了,重新使用原生js来写,所以最近在学习原生js. 一.选择dom元素: id let sure=document.getElementById('sure' ...
- js学习笔记--dom部分(一)
js 学习整理之Dom部分 前面我总结了我最近学习js基础部分,当时提到过js分了三大部分,第一部分ECMA基础也就是第一次写的基础部分, 第二部分也就是DOM部分,也就是这里要写的内容的,然后第三部 ...
- javascript基础学习系列-DOM盒子模型常用属性
最近在学习DOM盒子模型,各种属性看着眼花缭乱,下面根据三个系列来分别介绍一下: client系列 clientWidth :width+(padding-left)+(padding-right)— ...
- javascript基础学习--HTML DOM
写在前面的话:由于学校没有开过javascript这门课,所以平时用javascript时都是用到什么就去搜什么样的代码,但是在工作中有时候搜来的代码总是有那么点小问题,而当自己想去修改时,却又无从下 ...
- Vue.js_础学习之DOM操作
demo说明: 1.{{message}} --“Mustache” 语法(双大括号) 2.v-bind:属性名 ...
- 轻松学习JavaScript十八:DOM编程学习之DOM简单介绍
一DOM概述 DOM(文档对象模型)是HTML和XML的应用程序接口(API).DOM将把整个页面规划成由节点层级构成的文档. DOM描绘了一个层次化的节点树,执行开发者加入,移除和改动页面的某一部分 ...
- 学习WEBAPI(DOM)第二天
目录 第二天学习目标: 一.阻止超链接的默认跳转行为 二.鼠标进入事件和鼠标离开事件 三.根据name属性值获取元素==>表单标签,返回的是伪数组 四.根据类样式的名字来获取元素,返回的是伪数组 ...
- Javascript学习,DOM对象,方法的使用
JavaScript: ECMAScript: BOM: DOM: 事件 DOM的简单学习 功能:控制html文档内容 代码:获取页面标签(元素)对象和Element document.getElem ...
随机推荐
- SharePoint 2013中以其他用户身份登录的WebPart(免费下载)
在SharePoint 2013中微软并没有提供在SharePoint 2010中以其他用户身份登录的菜单,这对一般用户影响不大,但对于系统管理员或测试人员或特定人员(如在OA系统中的文员或秘书,常常 ...
- [转]C# dataGridview 报“索引-1没有值”的解决办法
很多WINFORM的开发人员在DataGridView的开发当中,都会出现“索引-1没有值”这个烦人的问题,其实较早之前,我已经大概知道问题的所在,也找到了解决方法,不过一直没有时间去深入研究一下,今 ...
- ExtJs TreePanel 使用帮助
tree :树 node:节点 1.全部展开 tree.expandAll(); 2.全部收缩 tree.collapseAll(); 3.得到父节点 node.parentNode 4.判断是否有父 ...
- Windows 服务开发框架介绍 - Topshelf
关于 TopShelf Topshelfis a framework for hosting services written using the .NET framework. The creati ...
- 二项堆(一)之 图文解析 和 C语言的实现
概要 本章介绍二项堆,它和之前所讲的堆(二叉堆.左倾堆.斜堆)一样,也是用于实现优先队列的.和以往一样,本文会先对二项堆的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本 ...
- php和java的memcached使用的兼容性问题解决过程
1. 背景: php 使用memcached客户端设置一个key,java使用java-memcached-client去读,报错如下: ERROR|com.whalin.MemCached.MemC ...
- fcitx 无法启动
困扰了好久的问题,终于解决了. 问题描述: 在fcitx的输入法配置栏里,输入法列表是空的,使用Ctrl+space无法启用任何的输入法, 当然此截图中的是有的,这是问题已经解决后的状态了. 解决方法 ...
- C#ASP.NET 通用扩展函数之 IsWhat 简单好用
好东西都需要人去整理.分类 注意:需要引用命名空间 SyntacticSugar 用法: /***扩展函数名细***/ //[IsInRange] int num = 100; //以前写法 if ( ...
- Python+Selenium进行UI自动化测试项目中,常用的小技巧3:写入excel表(python,xlsxwriter)
我们在项目中可能用到excel表生成,下面的代码就是对excel表的操作: import xlsxwriter import datetime class write_excel(): def __i ...
- Ubuntu13.04配置:Vim+Syntastic+Vundle+YouCompleteMe
序言 使用Ubuntu和vim已经有一段时间了,对于Vim下的插件应用,我总是抱着一股狂热的态度.这次,又在网上闲逛着,发现了一个个人博客提到了Vim代码补全这回事,并提到了YouCompleteMe ...