一、dom节点的关系及遍历

element.firstChild;  

如果节点为已知节点的第一个子节点就可以使用这个方法。此方法可以递归进行使用 element.firstChild.firstChild.....

在ie中,ie9以前,如果子节点中含以空格开头,则浏览器不认为这是一个节点,其它浏览器会认为这是TextNode节点。为了保持获取结果统一,所有浏览器可以用firstElementChild、lastElementChild等来获取非空白子节点,ie从ie9起可用新的api

element.lastChild; 

获得一个节点的最后一个节点,与firstChild一样也可以进行递归使用 element.lastChild.lastChild.....

element.childNodes;

获得节点的所有子节点,返回一个NodeList集合,然后通过循环和索引找到目标节点

element.previousSbiling;

获取节点的前一个兄弟节点

element.nextSbiling;

获取节点的后一个兄弟节点

element.parentNode;

获取节点的父节点

document.createNodeIterator(root,whatToShow,filter,entityReferenceExpansion)

对节点进行深度遍历(采用深度优先方式),遍历时的方法有两个,nextNode()和previousNode()
document.createTreeWalker(root, nodesToShow, filter, entityExpandBol)

相对更高级,除了包括nextNode()和previousNode()在内的相同的功能之外,这个类型还提供了下列用于在不同方向上遍历DOM结构的方法。如:
parentNode():遍历到当前节点的父节点;
firstChild():...第一个子节点;
lastChild():...最后一个子节点;
nextSibling():...当前节点的下一个同辈节点;
previousSibling():...当前节点的上一个同辈节点;
currentNode属性,表示任何遍历方法在上一次遍历中返回的节点。通过设置这个属性也可以修改遍历继续进行的节点。

element.contains(DOMNode)

判断DOMNode是否是element的子孙元素,如果是则返回true,所有浏览器都支持
element.compareDocumentPosition(DOMNode)

判断元素之间的关系,返回的是1个掩码,IE8-和opera9.5-不支持该属性

二、访问/获取节点

document.getElementById(id);

返回对拥有指定id的第一个对象进行访问,id区分大小写,不然存在兼容性问题

document.getElementsByName(name);

返回文档节点中含有指定name的节点集合,主要用于单选/复选按钮组

document.getElementsByTagName(tagname);

返回带有指定标签名的对象集合,html中不区分大小写,xhtml或xml中要区分,返回的HtmlCollection中有一个namedItem方法,可以取得元素上的name属性值

document.getElementsByClassName(classname1 classname2);

返回带有指定class名称的对象集合,如果要满足多少classname,则使用空格分隔

document.querySelector(css选择器)

取得满足条件的第一个元素,ie8以下不支持

document.querySelectorAll(css选择器)

取得NodeList集合,但是在底层实现上有差异(静态集合),性能比NodeList高,ie8以下不支持

element.matchesSelector(css选择器)

某个元素是否有相应的选择器,兼容性未知

三、节点类型

四、创建节点/属性

document.createElement(eName);

创建一个节点

document.createAttribute(attrName);

对某个节点创建属性

document.createTextNode(text);

创建文本节点

五、插入节点

document.insertBefore(newNode,referenceNode);

在某个节点前插入节点

parentNode.appendChild(newNode);

给某个节点添加子节点

element.insertAdjacentHTML(position,htmlText)

在元素相应位置插入html

六、删除节点

parentNode.removeChild(node);

删除某个节点的子节点 node是要删除的节点

注意:为了保证兼容性,要判断元素节点的节点类型(nodeType),若nodeType==1,再执行删除操作。

七、节点克隆

node.cloneNode(deep)

克隆节点后代,如果deep为true的话会克隆节点上的属性,默认为false

ie上即使deep为false,也会克隆节点上的js事件

八、节点属性访问或操作

element.attributes

返回元素属性集合

element.getAttribute(name)

通过属性名称获取某个节点属性的值

element.setAttribute(name,value);

修改某个节点属性的值

element.removeAttribute(name);

删除某个属性


节点样式相关

1.取得class

element.className

element.getAttribute("class")

element.classList  返回元素的类名集合,作为 DOMTokenList 对象,然后可以使用add() remove()等方法 ie10以下不支持

2.style

element.style返回一个 CSSStyleDeclaration 对象,表示元素的 内联style 属性(attribute),会忽略任何样式表应用的属性

element.style.cssText = "color: blue; border: 1px solid black";  //一次性给style设置多个属性,等同于element.setAttribute("style", "color:red; border: 1px solid blue;");

element.style.cssFloat属性在ie中要写成element.style.styleFloat

style中带横线的属性,例如margin-top,要采用驼峰写法,element.style.marginTop

3.查看一个标签上应用的所有样式(内联的或是通过样式表的)

IE用element.currentStyle,其它浏览器用document.defaultView.getComputedStyle(element,css伪元素),如果是在浏览器环境,可以使用window.getComputedStyle(element,css伪元素)


九、插入Html

element.innerHTML

  • 在读模式下,返回的html在各个浏览中有所不同,IE和Opera会把HTML全部转换为大写,而其它浏览器则按DOM中的返回(包括空格和缩进)
  • 写入html再读取后,结果有可能会有不同,原因在于写入时dom处理引擎对树进行了操作和格式化
  • 写入<script>是无效的,ie8及更早的版本例外
  • 写入<style>在大多数浏览器中都是有效的,但ie8及更早的版本

  • 组装好html后一次性插入(原因在于dom会回流)

element.innerText
向节点中写入或获取一个文本节点,firefox不支持此属性,需使用textContent,但是textContent会返回样式和脚本


 十、动态脚本和动态样式

  • 插入内嵌脚本注意事项

var script=document.createElement("script");

script. appendChild( document. createTextNode(" function sayHi(){ alert(' hi');}"));

ie中不支持,所以兼容的脚本如下

script. text = "function sayHi(){ alert(' hi');}";

  • 插入内联样式注意事项

var style = document. createElement(" style");

style. type = "text/ css";

style. appendChild( document. createTextNode(" body{ background- color: red}"));

var head = document. getElementsByTagName(" head")[ 0]; head. appendChild( style);

ie不允许dom访问script和style元素的子节点,所以得用style. styleSheet. cssText ="body{ background- color: red}";

如果 专门 针对 IE 编写 代码, 务必 小心 使用 styleSheet. cssText 属性。 在 重用 同一个< style> 元素 并 再次 设置 这个 属性 时, 有可能 会 导致 浏览器 崩溃。 同样, 将 cssText 属性 设置 为 空 字符串 也可能 导致 浏览器 崩溃。 我们 希望 IE 中的 这个 bug 能够 在将来 被 修复。

十一、参考手册

Dom对象参考

Element对象参考

dom知识总结的更多相关文章

  1. DOM知识梳理

    DOM 我们知道,JavaScript是由ECMAScript + DOM + BOM组成的.ECMAScript是JS中的一些语法,而BOM主要是浏览器对象(window)对象的一些相关知识的集合. ...

  2. 恶补web之七:html DOM知识

    html DOM定义了访问和操作html文档的标准;dom是w3c的标准,dom定义了访问html和xml文档的标准: w3c文档对象模型(dom)是中立平台和语言的接口,它允许程序和脚本动态访问和更 ...

  3. jQuery操作DOM知识总结

    jquery操作DOM(节点) 1.创建元素 //$(htmlStr) //htmlStr:html格式的字符串 $("<span>这是一个span元素</span> ...

  4. JavaScript DOM知识 (一)

    特性.方法 类型.返回类型 说明 nodeName String 节点的名字:根据节点类型而定义 nodeValue String 节点的值:根据节点的类型而定义 nodeType Number 节点 ...

  5. javascript DOM知识脑图

  6. 通俗易懂的来讲讲DOM

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

  7. DOJO DOM 功能

    In this tutorial, you'll learn about how to use Dojo to manipulate the DOM in a simple, cross-browse ...

  8. HTML之DOM

    对于B/S开发,客户端与服务器端的交互是非常必要的,JavaScript的提出解决了很多问题,AJAX的提出也解决了异步通信的问题,更加为用户着想了.而DOM是其中非常基础的知识,在学习AJAX的同时 ...

  9. 有关DOM的小总结

    一直以为DOM(文档对象模型)是JS中最简单的一部分.不可否认,它确实很简单,因为DOM的思维模式有点固定,只需要简单地记住一些固定的方法,所以DOM可以说是所有js(这里指的是客户端的js)入门的起 ...

随机推荐

  1. 2018.9.16 Redis 边学习边总结

    Redis 是一个使用 C 语言写成的,开源的 key-value 数据库..和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合) ...

  2. 通过sql语句查询出来的结果字段没有到对应实体类时的处理方法

    通过sql语句查询出来的结果字段没有到对应实体类时的处理方法,对于Person类获取用户第一个名字和年龄两个字段,常见的有两种方式: 1.在创建一个与查询结果字段对应的类,然后通过构造函数实现: Qu ...

  3. Laravel5 打印SQL

    在src/Illuminate/Database/Connection.php里打印SQL默认是关闭的,见https://github.com/laravel/framework/commit/e0a ...

  4. Knowledge Point 20180305 机器数转换与进制转换

    机器数(这里的机器数说的就是数值在计算机中的存储形式,相关可以了解数据在计算机中的表示)之间的转换往往是通过原码来实现的,下面我们结合进制来来一下: 进制也就是进位制,是人们规定的一种进位方法. 对于 ...

  5. DHTML---HTML5

    1. HTML概述 网页是网站的表现层,各种编程语言(如Java)构成后台的逻辑,我们将后台逻辑做好然后通过页面表达.同时通过网页来与后台进行交互.而Html是我们做网页的基础,由浏览器来解析. 1. ...

  6. 零基础Python知识点回顾(一)

    如果你是小白,建议只要安装官网的python-3.7.0-amd64.exe 然后在电脑cmd命令提示符  输入检查是否已经安装pip,一般安装了python都会有的. >pip         ...

  7. pl sql 存储过程、函数

    存储过程用于执行特定的操作,当建立存储过程时,既可以指定输入参数(in),也可以指定输出参数(out),通过在过程中使用输入参数,可以将数据传递到执行部分:通过使用输出参数,可以将执行部分的数据传递到 ...

  8. c#的二进制序列化组件MessagePack介绍

    c#的序列化有多种,我一般喜欢用第三方组件,一个公共组件要拿出来用,而且支持很多语言,甚至以此谋生,肯定有其优势. 有或者说存在必然有其合理性,经过几年开发,我更加喜欢第三方的东西,类似序列化的东西. ...

  9. 调用微信JS上传照片接口上传图片

    public ActionResult UploadImge(string serverId) { var headPath = "/UploadImage/" + DateTim ...

  10. ETO的公开赛T5《猎杀蓝色空间号》题解

    这道题别看题面这么长,其实题意很简单 就是让你求从起点开始的最长合法区间 合法的要求有两个:兜圈子和直飞 且这两个条件相互独立 (也就是说兜圈子的末尾不会对下面可能出现的直飞造成影响) 举个例子: 1 ...