文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口。

  DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。换句话说,这是表示和处理一个HTML或XML文档的常用方法。有一点很重要,DOM的设计是以对象管理组织(OMG)的规约为基础的,因此可以用于任何编程语言。最初人们把它认为是一种让JavaScript在浏览器间可移植的方法,不过DOM的应用已经远远超出这个范围。Dom技术使得用户页面可以动态地变化,如可以动态地显示或隐藏一个元素,改变它们的属性,增加一个元素等,Dom技术使得页面的交互性大大地增强.

  DOM实际上是以面向对象方式描述的文档模型。DOM定义了表示和修改文档所需的对象、这些对象的行为和属性以及这些对象之间的关系。可以把DOM认为是页面上数据和结构的一个树形表示,不过页面当然可能并不是以这种树的方式具体实现。

  通过 JavaScript,您可以重构整个 HTML 文档。您可以添加、移除、改变或重排页面上的项目。
要改变页面的某个东西,JavaScript 就需要获得对 HTML 文档中所有元素进行访问的入口。这个入口,连同对 HTML 元素进行添加、移动、改变或移除的方法和属性,都是通过文档对象模型来获得的(DOM)。DOM 可被 JavaScript 用来读取、改变 HTML、XHTML 以及 XML 文档。

1 查找元素

1.1 直接查找
 document.getElementById             根据ID获取一个标签
 document.getElementsByName          根据name属性获取标签集合
 document.getElementsByClassName     根据class属性获取标签集合
 document.getElementsByTagName       根据标签名获取标签集合

1.2 间接查找

 parentNode          // 父节点
 childNodes          // 所有子节点
 firstChild          // 第一个子节点
 lastChild           // 最后一个子节点
 nextSibling         // 下一个兄弟节点
 previousSibling     // 上一个兄弟节点

 parentElement           // 父节点标签元素
 children                // 所有子标签
 firstElementChild       // 第一个子标签元素
 lastElementChild        // 最后一个子标签元素
 nextElementtSibling     // 下一个兄弟标签元素
 previousElementSibling  // 上一个兄弟标签元素

2 操作

2.1 内容

 innerHTML  设置或获取位于对象起始和结束标签内的 HTML
 outerHTML  设置或获取对象及其内容的 HTML 形式
 innerText  设置或获取位于对象起始和结束标签内的文本
 outerText  设置(包括标签)或获取(不包括标签)对象的文本
 value      值

看个例子,HTML和CSS代码:

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Title</title>
     <style>
         #i1{
             color: #46FF1D;
             background-color: #c70048;
         }
     </style>
 </head>
 <body>
     <div id="i1">
         <div>哈哈</div>
         <div id="i2">。。呵呵
             <input type="text"/>
         </div>
     </div>
 </body>
 </html>

浏览器console中:

var tag=document.getElementById("i1");
undefined
tag.innerHTML
"
        <div>哈哈</div>
        <div id="i2">。。呵呵
            <input type="text">
        </div>
    "
-----------------------------------
tag.outerHTML

"<div id="i1">
        <div>哈哈</div>
        <div id="i2">。。呵呵
            <input type="text">
        </div>
    </div>"
------------------------------------
tag.innerText "哈哈 。。呵呵 "
-----------------------------------
tag.outerText
"哈哈
。。呵呵  "

2.2 属性

 attributes                // 获取所有标签属性
 setAttribute(key,value)   // 设置标签属性
 getAttribute(key)         // 获取指定标签属性

 /*
 var atr = document.createAttribute("class");
 atr.nodeValue="democlass";
 document.getElementById('n1').setAttributeNode(atr);
 */

2.3 class操作

 className                // 获取所有类名
 classList.remove(cls)    // 删除指定类
 classList.add(cls)       // 添加类

2.4 标签操作

2.4.1 创建标签

 // 方式一
 var tag = document.createElement('a')
 tag.innerText = "zingp"
 tag.className = "c1"
 tag.href = "http://www.cnblogs.com/zingp"

 // 方式二
 var tag = "<a class='c1' href='http://www.cnblogs.com/zingp'>zingp</a>"

2.4.2 操作标签

 // 方式一
 var obj = "<input type='text' />";
 xxx.insertAdjacentHTML("beforeEnd",obj);
 xxx.insertAdjacentElement('afterBegin',document.createElement('p'))

 //注意:第一个参数只能是'beforeBegin'、 'afterBegin'、 'beforeEnd'、 'afterEnd'

 // 方式二
 var tag = document.createElement('a')
 xxx.appendChild(tag)
 xxx.insertBefore(tag,xxx[1])

2.5 样式操作

 var obj = document.getElementById('i1')

 obj.style.fontSize = "32px";
 obj.style.backgroundColor = "red";

2.6 位置操作

 总文档高度
 document.documentElement.offsetHeight

 当前文档占屏幕高度
 document.documentElement.clientHeight

 自身高度
 tag.offsetHeight

 距离上级定位高度
 tag.offsetTop

 父定位标签
 tag.offsetParent

 滚动高度
 tag.scrollTop

 /*
     clientHeight -> 可见区域:height + padding
     clientTop    -> border高度
     offsetHeight -> 可见区域:height + padding + border
     offsetTop    -> 上级定位标签的高度
     scrollHeight -> 全文高:height + padding
     scrollTop    -> 滚动高度
     特别的:
         document.documentElement代指文档根节点
 */

2.7 提交表单

document.geElementById('form').submit()

2.8 其他操作

 console.log                 输出框
 alert                       弹出框
 confirm                     确认框

 // URL和刷新
 location.href               获取URL
 location.href = "url"       重定向
 location.reload()           重新加载

 // 定时器
 setInterval                 多次定时器
 clearInterval               清除多次定时器
 setTimeout                  单次定时器
 clearTimeout                清除单次定时器

3 事件

对于事件需要注意的要点:

  • this

this标签当前正在操作的标签。

示例1:

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Title</title>
     <style>
         .i1{
             background-color: #c70048;
             width: 500px;
             height: 300px;
             margin: auto;

         }
     </style>
 </head>
 <body>
     <div class="i1 ">
         我爱北京天安门
     </div>
     <script>
         var tag = document.getElementsByClassName("i1");
         console.log(tag);
         tag[0].onmouseover = function () {
              tag[0].style.backgroundColor = "#94C728";
         };
         tag[0].onmouseout = function () {
              tag[0].style.backgroundColor = "red";
         };
     </script>
 </body>
 </html>

示例2:

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Title</title>
 </head>
 <body>
     <table border="1" width="300px">
         <tr><td>1</td><td>2</td><td>3</td></tr>
         <tr><td>1</td><td>2</td><td>3</td></tr>
         <tr><td>1</td><td>2</td><td>3</td></tr>
     </table>
     <script>
         var myTrs = document.getElementsByTagName("tr");
         for(var i=0;i<myTrs.length;i++){
             myTrs[i].onmouseover = function () {
                 this.style.backgroundColor = "red";
             };
             myTrs[i].onmouseout = function () {
                 this.style.backgroundColor = "";
             };
         }
     </script>
 </body>
 </html>
 

python【第十六篇】DOM的更多相关文章

  1. Python之路【第十六篇】:Django【基础篇】

    Python之路[第十六篇]:Django[基础篇]   Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了O ...

  2. Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理)

    Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理) 一丶封装 , 多态 封装:            将一些东西封装到一个地方,你还可以取出来( ...

  3. Python 爬虫十六式 - 第七式:正则的艺术

    RE:用匹配来演绎编程的艺术 学习一时爽,一直学习一直爽   Hello,大家好,我是 Connor,一个从无到有的技术小白.上一次我们说到了 pyquery 今天我们将迎来我们数据匹配部分的最后一位 ...

  4. Python爬虫十六式 - 第四式: 使用Xpath提取网页内容

    Xpath:简单易用的网页内容提取工具 学习一时爽,一直学习一直爽 !   Hello,大家好,我是Connor,一个从无到有的技术小白.上一次我们说到了 requests 的使用方法.到上节课为止, ...

  5. Python爬虫十六式 - 第三式:Requests的用法

    Requests: 让 HTTP 服务人类 学习一时爽,一直学习一直爽   Hello,大家好,我是Connor,一个从无到有的技术小白.今天我们继续来说我们的 Python 爬虫,上一次我们说到了 ...

  6. Python 爬虫十六式 - 第二式:urllib 与 urllib3

    Python请求标准库 urllib 与 urllib3 学习一时爽,一直学习一直爽!   大家好,我是 Connor,一个从无到有的技术小白.上一次我们说到了什么是HTTP协议,那么这一次我们就要动 ...

  7. 解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译)

    解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译) http://improve.dk/orcamdf-rawdatabase-a-swiss-a ...

  8. 跟我学SpringCloud | 第十六篇:微服务利剑之APM平台(二)Pinpoint

    目录 SpringCloud系列教程 | 第十六篇:微服务利剑之APM平台(二)Pinpoint 1. Pinpoint概述 2. Pinpoint主要特性 3. Pinpoint优势 4. Pinp ...

  9. Egret入门学习日记 --- 第十六篇(书中 6.10~7.3节 内容)

    第十六篇(书中 6.10~7.3节 内容) 昨天搞定了6.9节,今天就从6.10节开始. 其实这个蛮简单的. 这是程序员模式. 这是设计师模式. 至此,6.10节 完毕. 开始 6.11节. 有点没营 ...

  10. Python 爬虫十六式 - 第六式:JQuery的假兄弟-pyquery

    PyQuery:一个类似jquery的python库 学习一时爽,一直学习一直爽   Hello,大家好,我是 Connor,一个从无到有的技术小白.上一次我们说到了 BeautifulSoup 美味 ...

随机推荐

  1. java_method_日期方法

    package cn.com.qmhd.tools; import java.text.SimpleDateFormat; import java.util.Calendar; import java ...

  2. 学习:Linux基础知识<一>

    >>硬盘分区模式 硬盘分区模式一般如下: -- /  (根目录) -- /usr    (操作系统) --/home (用户信息) -- /var    (默认服务器的登录文件,邮件与WW ...

  3. sql server 分组统计数据

    说明:group by是sql中对数据表中的数据进行分组的,在select列表中出现的字段必须全部出现在group by 字段中,出现在聚合函数中的字段在group by中可有可无,没有出现在sele ...

  4. 读书笔记-HBase in Action-第二部分Advanced concepts-(1)HBase table design

    本章以山寨版Twitter为例介绍HBase Schema设计模式.广义的HBase Schema设计不仅仅包含创建表时指定项,还应该综合考虑Column families/Column qualif ...

  5. 跟我一步一步开发自己的Openfire插件

    http://www.blogjava.net/hoojo/archive/2013/03/07/396146.html 跟我一步一步开发自己的Openfire插件 这篇是简单插件开发,下篇聊天记录插 ...

  6. IE无法打开internet网站已终止操作的解决的方法

    用IE内核浏览器的朋友,或许不经意间会碰到这样滴问题: 打开某个网页时,浏览器“嘣”跳出一个提示框“Internet Explorer无法打开Internet 站点...已终止操作”.而大多数情况下该 ...

  7. oracle14 复杂数据类型

    复合类型-pl/sql表类型 相当于高级语言中的数组,但是需要注意的是在高级语言中数组的下标不能为负数,而pl/sql是可以为负数的,并且表元素的下标没有限制.实例如下: Sql代码 .declare ...

  8. PHP多维数组的魅力

    让我们来体验一下多位数组的魅力吧! 多维数组就是一个数组里面包含一个或多个数组,这就是多维数组.下面用多维数组来编写一个小案例(代码在图片下面): <meta http-equiv=" ...

  9. Linux ssh/scp连接时避免输入yes(公钥验证)并防止出现POSSIBLE BREAK-IN ATTEM

    方法一:连接时加入StrictHostKeyChecking=no ssh -o StrictHostKeyChecking=no root@192.168.1.100 方法二:修改/etc/ssh/ ...

  10. boost.log要点笔记

    span.kw { color: #007020; font-weight: bold; } code > span.dt { color: #902000; } code > span. ...