定义:文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口。它给文档提供了一种结构化的表示方法,
可以改变文档的内容和呈现方式

节点:(例如:<div id="属性节点">测试</div>)

  元素节点:标签元素<div>

  文本节点:标签内的所有纯文本 “测试”

属性节点 :标签的属性   ‘id’

  IE 浏览器是以com实现的DOM 返回一个Object
一、获得元素节点
  var ele = document.getElementById("purchases");//根据ID获得DOM   没有 返回 null (IE5-  不兼容)

  var eles = document.getElementsByTagName("li");//根据元素名获得DOM集合
  var eless = document.getElementsByTagName("*");//*匹配符 获得文档中所有的DOM集合

二、获得属性值  getAttribute()  此方法兼容性不好。

getAttribute('属性名字'); 根据属性名 获得属性值 (自定义的属性也可以);

getAttribute("style");   非IE 返回style 属性值(字符串类型)       IE返回的是object类型
  var pAttr=ele.getAttribute("title");//获得ele节点的title属性值
三、设置属性值
  setAttribute("属性名","属性值"); //根据给属性重新赋值
  ele.setAttribute("title","ul_title"); //把ele节点的title属性值设置未ul_title

注意:对于 style/onclick 属性 使用setAttribut( )方法  赋值 IE7- 不兼容

四、移除元素属性 removeAttribute('属性名')  IE6-  不存在

五、操作元素节点的文本

1..获得元素节点的纯文本 nodeValue

$p.childNodes[0].nodeValue; //获得$p 元素节点的纯文本内容

2. innerHTML 可以获得元素节点的文本信息(包括HTML标签) 非W3C 标准

var text= document.getElementById("ul").innerHTML;

可以给元素节点赋值(包括标签元素)

document.getElementById("ul").innerHTML="<span>AAAAAA</span>";

六 、获得元素节点的标签名

var tagName=$dom.nodeName;

var tagName=$dom.tagName;  两种方式等价

七、层次节点

nodeType:判断当前节点类型是什么

.如果只希望遍历元素节点,建议使用nodeType属性则更为直接方便! 
    nodeType==1:表示元素节点
    nodeType==2:表示属性节点
    nodeType==3:表示文本节点

1. childNodes属性返回元素的所有子节点,包含了文本节点与元素节点。

例如:<div id="test">测试文本一<em>斜体文本</em>测试文本二</div>

var len=document.getElementById("test").childNodes.length; 等于3

   第一个子节点是文本节点: 测试文本一

   第二个子节点是元素节点:<em>斜体文本</em>

  第三个子节点是文本节点: 测试文本二

获得 第一个子节点:

document.getElementById("test").childNodes[0] ==document.getElementById("test").firstChild;

获得 最后一个子节点:

document.getElementById("test").childNodes[len-1] ==document.getElementById("test").lastChild;

获得上一个兄弟节点: document.getElementById("test").childNodes[1].previousSbiling;

      获得下一个兄弟节点: document.getElementById("test").childNodes[1].nextSbiling;

获得父类节点: document.getElementById("test").childNodes[1].parentNode;

2. children 获得元素的忽略空行的子节点    非W3c标准支持IE5+

<ul id="ul">
  <li>AAAAAA</li>
  <li>AAAAAA</li>
  <li>AAAAAA</li>
  <li>AAAAAA</li>
</ul> var $p=document.getElementById("ul");
alert($p.childNodes.length); //
alert($p.children.length);//

八、操作属性节点

<div id="ul" title="无序列表" class="ulc">AAAAAAAAAAAAAAA</div>

      var $p=document.getElementById("ul").attributes;  //获得 NamedNodeMap 类型
                 var $p1=$p[0].nodeName;  等于 class    //从后往前遍历

      var titleValue=$p['title'].nodeValue;  等于 ulc

九、创建节点

1.创建元素节点     

    var $ul=document.getElementById("ul");
    var $li=document.createElement("li");//只是创建了一个li元素节点只是在内存中 还没有添加到文档上;
    $ul.appendChild($li);//给 $ul 追加一个 子元素
    var text=document.createTextNode("测试文本"); //创建文本
    $li.appendChild(text); // 将文本 添加到 $li 元素中
    var $p=document.createElement("p"); //创建p元素
    $ul.parentNode.insertBefore($p,$ul);// 在$ul元素节点前添加$p元素节点

    //IE7- 不兼容
    var input=document.createElement("input");
    input.setAttribute("type","radio");
    input.setAttribute("name","sex");
    $ul.parentNode.insertBefore(input,$ul);

十、常用方法

innerHTML

1.获得文本 (包括HTML标签)

2.赋值文本 如果文本包含标签也可以

innerTEXT

      1.获得文本   过滤掉HTML标签     火狐不支持  使用textContent

var html=document.documentElement;//获得HTML元素节点
var body=document.body;//获得body元素节点
var title=document.title;//获得页面title属性值
var url=document.URL;//获得页面路径 页面必须在服务器打开
var imgs=document.images;//获得页面的img元素集合
var doc=document.compatMode;//获得浏览器模式 CSS1Compat:标准模式 BackCompat:怪异模式
var width=document.documentElement.clientWidth; // 获得页面宽度 IE 在 CSS1Compat:标准模式 下
var width=document.body.clientWidth; // 获得页面宽度 IE 在BackCompat:怪异模式 下
var show=document.getElementById("div").scrollIntoView();//将指定的节点滚动到可见区域
var $ul=document.getElementById("ul");
var li=$ul.firstChild;
var flag=$ul.contains(li);//判断li是否是$ul的子元素 火狐3.6+支持 其他浏览器均支持
var flag1=$ul.compareDocumentPosition(li);// flag1 >16 表示li是$ul的子元素 火狐3.6- //兼容性写法一个元素(refNode)是另一个元素(otherNode)的父元素 返回 boolen类型值
function myContains(refNode,otherNode){
if(typeof refNode.contains!='undefined'){
return refNode.contains(otherNode);
}
else if(typeof refNode.compareDocumentPosition=='function'){
return refNode.compareDocumentPosition(otherNode)>16;
}
}

十一、DOM元素尺寸

  方式一  获得元素尺寸 返回值是字符串 这两种方式 只能获得css定义的尺寸 如果加padding值不会计算实际尺寸
1、   var box=document.getElementById("box");
    var width=box.style.width;//获得行内  内连样式

2、  var style=window.getComputedStyle?window.getComputedStyle(box,null):null || box.currentStyle;
   var height=style.height;//如果没值IE=auto 非IE=默认大小

   方式二    获得计算后的实际尺寸(如果单位不是px 则自动计算为px单位) number类型 默认单位是px
            边框和外边距不算入实际值 内边距和滚动条算入实际值
             如果没有设置尺寸 没有设置内边距和滚动条 非IE=默认大小 IE=0
    var width2=box.clientWidth;
    var height2=box.clientHeight;

   方式三   获得元素实际尺寸 对于内边距和边框计算实际值 边框和外边距不算入实际值 浏览器都支持 (推荐使用)
    var width3=box.offsetWidth;
    var height3=box.offsetHeight;

十二、获得元素位置

  1、获得元素相对于父元素的位置 当前元素要加上样式 position:relative;left:10px;top:10px;
    var top=box.offsetTop;
    var left=box.offsetLeft;

 2、获得元素相对于根元素的位置 IE存在兼容问题
  var top=box.getBoundingClientRect().top;
  var left=box.getBoundingClientRect().left;
  var right=box.getBoundingClientRect().right;
  var bottom=box.getBoundingClientRect().bottom;

//兼容性写法
function getRect(ele){
var rect=ele.getBoundingClientRect();
var clientTop=document.documentElement.clientTop;
var clientLeft=document.documentElement.clientLeft;
return {
  top:rect.top-clientTop,
  bottom:rect.bottom-clientTop,
  left:rect.left-clientLeft,
  right:rect.right-clientLeft
  };
}

 

JS 操作 DOM的更多相关文章

  1. 框架操作DOM和原生js操作DOM比较

    问题引出 对于Angular和React操作DOM的速度,和原生js操作DOM的速度进行了一个比较: 一个同学做的demo 代码如下: <!DOCTYPE html> <html n ...

  2. js操作DOM对象

    js操作DOM对象  (Document Object Model)文档对象模型 nodeType返回值 1:元素节点 2:属性节点 3:文本节点 8:注释节点 9: 文档节点 nodeName 节点 ...

  3. 原生js操作DOM基础-笔记

    原文参考http://mp.weixin.qq.com/s?__biz=MzU3MDA0NTMzMA==&mid=2247485490&idx=1&sn=15197b4b53e ...

  4. 原生js操作Dom节点:CRUD

    知识点,依然会遗忘.我在思考到底是什么原因.想到研究生考试准备的那段岁月,想到知识体系的建立,知识体系分为正向知识体系和逆向知识体系:正向知识体系可以理解为教科书目录,逆向知识体系可以理解考试真题. ...

  5. 【JavaScript实用技巧(二)】Js操作DOM(由问题引发的文章改版,新人大佬都可)

    [JavaScript实用技巧(二)]Js操作DOM(由问题引发的文章改版,新人大佬都可!) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人 ...

  6. JS操作DOM常用API总结

    <JS高程>中的DOM部分写的有些繁琐,还没勇气整理,直到看到了这篇博文 Javascript操作DOM常用API总结,顿时有了一种居高临下,一览全局的感觉.不过有时间还是得自己把书里面的 ...

  7. JS 操作Dom节点之CURD

    许多优秀的Javascript库,已经封装好了丰富的Dom操作函数,这可以加快项目开发效率.但是对于非常注重网页性能的项目来说,使用Dom的原生操作方法还是必要的. 1. 查找节点 document. ...

  8. JS操作DOM对象——JS基础知识(四)

    一.JavaScript的三个重要组成部分 (1)ECMAScript(欧洲计算机制造商协会) 制定JS的规范 (2)DOM(文档对象模型)重点学习对象 处理网页内容的方法和接口 (3)BOM(浏览器 ...

  9. [总结]JS操作DOM常用API详解

    文本整理了javascript操作DOM的一些常用的api,根据其作用整理成为创建,修改,查询等多种类型的api,主要用于复习基础知识,加深对原生js的认识. 基本概念 在讲解操作DOM的api之前, ...

  10. 原生js操作dom的方法

    今天学习了原生js的dom节点的操作,就记录下来,仅供自己以后参考. 1)创建节点:除了可以使用createElement创建元素,也可以使用createTextNode创建文本节点. documen ...

随机推荐

  1. centos 7安装配置bind

    环境: 三台虚拟机,全部安装Centos 7, tony4.hadoop.com 192.168.31.223 tony5.hadoop.com 192.168.31.224 tony6.hadoop ...

  2. 【分块打表】bzoj1662 [Usaco2006 Nov]Round Numbers 圆环数

    #include<cstdio> using namespace std; #define BN 380000 const int table[]={0,185815,378154,561 ...

  3. 我与solr(六)--solr6.0配置中文分词器IK Analyzer

    转自:http://blog.csdn.net/linzhiqiang0316/article/details/51554217,表示感谢. 由于前面没有设置分词器,以至于查询的结果出入比较大,并且无 ...

  4. <Oracle Database>后台进程

    进程监视器进程(PMON)  这个进程负责在出现异常中止的连接之后完成清理.PMON会回滚未提交的工作,并释放为失败进程分配的SGA资源.PMON还负责监视其他的Oracle后台进程,并在必要时(如果 ...

  5. 深度解析Java8 – AbstractQueuedSynchronizer的实现分析(下)

    本文首发在infoQ    作者:刘锟洋 前言 经过本系列的上半部分JDK1.8 AbstractQueuedSynchronizer的实现分析(上)的解读,相信很多读者已经对AbstractQueu ...

  6. debian下使用gitosis+gitweb搭建SSH认证的git服务器

    搭建完成Git服务器后,需要使用两台机器进行测试,一台机器作为服务器端server,一台服务器作为客户端client.整个系统,需要三个计算机账户,这里假设server端的账户名为git,client ...

  7. 对json排序

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. 读bootstrap2.3.2有感2

    排版: Bootstrap定义的全局 font-size 是 14px,line-height 是 20px.这些样式应用到了 <body> 和所有的段落上.另外,对 <p> ...

  9. Mybatis 后台SQL不输出

    在正确设置log4j.properties之后还是无法输出想要的SQL语句 经过搜索,发现是跟slf4j-api-1.6.1.jar这个jar包冲突了. 删掉之后就正常了, 但是这个包删掉的话acti ...

  10. ehcache基本使用

    maven <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache< ...