HTML DOM (文档对象模型)

当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。

HTML DOM 模型被构造为对象的树。

HTML DOM 树

通过可编程的对象模型,JavaScript获得了足够的能力来创建动态的 HTML。

l  JavaScript 能够改变页面中的所有 HTML 元素

l  JavaScript 能够改变页面中的所有 HTML 属性

l  JavaScript 能够改变页面中的所有 CSS 样式

l  JavaScript 能够对页面中的所有事件做出反应

二 查找 HTML 元素

通常,通过 JavaScript,您需要操作 HTML 元素。

有三种方法来找到要操作的元素:

l  通过 id 找到 HTML 元素

document.getElementById(id)

l  通过标签名找到 HTML 元素

getElementsByTagName(tagName)

l  通过类名找到 HTML 元素  (在 IE 5,6,7,8 中无效)

三 改变 HTML

1.改变 HTML 输出流

document.write()

可用于直接向 HTML 输出流写内容。

提示:绝不要使用在文档加载之后使用 document.write()。这会覆盖该文档。

2. 改变 HTML 内容

document.getElementById(id).innerHTML=newHTML

3. 改变 HTML 属性

document.getElementById(id).attribute=newvalue

实例:

<body>

<img id="image" src="smiley.gif">

<script>

document.getElementById("image").src="landscape.jpg";

</script>

</body>

4.改变HTML样式

document.getElementById(id).style.property=newstyle

<p id="p2">HelloWorld!</p>

<script>

document.getElementById("p2").style.color="blue";

document.getElementById("p2").style.background-color="#ccc";

</script>

注:visibility显示与隐藏文本,值为hidden和visible。

5. 对 HTML 事件做出反应

HTML 事件的例子:

l  当用户点击鼠标时

l  当网页已加载时

l  当图像已加载时

l  当鼠标移动到元素上时

l  当输入字段被改变时

l  当提交 HTML 表单时

l  当用户触发按键时

等等

当事件发生时可以执行 JavaScript;

如用户在 HTML 元素上点击时,可以对 HTML 的onclick事件添加 JavaScript 代码:

onclick=JavaScript

实例:

<script>

function changetext(obj){obj.innerHTML="谢谢!";}

</script>

<h1onclick="changetext(this)">请点击该文本</h1>

onclick是HTML元素的点击事件;

要让HTML元素在某个事件发生(前,时,后)作什么(作什么是动作),首先要先给这个HTML元素添加对应的事件(添加事件),其次再加上你要作的动作(编写JS代码);

1).事件添加方式及onclick事件

a.事件直接加在HTML元素上

<h1onclick="this.innerHTML='谢谢!'">请点击该文本</h1>

b.事件通过JS添加在HTML元素上

<button id="myBtn ">点击这里</button>

<script>

document.getElementById("myBtn").onclick=function(){displayDate()};

</script>

2).onload 和 onunload 事件

onload 和 onunload 事件会在用户进入或离开页面时被触发。

onload 事件可用于检测访问者的浏览器类型和浏览器版本,并基于这些信息来加载网页的正确版本。

onload 和 onunload 事件可用于处理cookie。

实例:

<!DOCTYPE html>

<html>

<bodyonload="checkCookies()">

<script>

function checkCookies()

{

if (navigator.cookieEnabled==true)

{

alert("已启用cookie")

}

else

{

alert("未启用cookie")

}

}

</script>

<p>提示框会告诉你,浏览器是否已启用cookie。</p>

</body>

</html>

3) .onchange事件

onchange 事件常结合对输入字段的验证来使用,或者其它动作.

实例:

<script>

function myFunction()

{

varx=document.getElementById("fname");

x.value=x.value.toUpperCase();

}

</script>

</head>

<body>

<input type="text"id="fname" onchange="myFunction()">

<p>当您离开输入字段时,会触发将输入文本转换为大写的函数。</p>

4).onmouseover 和 onmouseout 事件

onmouseover 和 onmouseout 事件可用于在用户的鼠标移至HTML 元素上方或移出元素时触发函数

实例:

<h1 onmouseover="style.color='red'"onmouseout="style.color='blue'">

例一 请把鼠标移到这段文本上

</h1>

<divonmouseover="mOver(this)" onmouseout="mOut(this)" >

例二 把鼠标移到上面

</div>

<script>

function mOver(obj)

{

obj.innerHTML="谢谢"

}

function mOut(obj)

{

obj.innerHTML="把鼠标移到上面"

}

</script>

5). onmousedown、onmouseup 以及 onclick 事件

onmousedown, onmouseup 以及onclick 构成了鼠标点击事件的所有部分;

l   首先当按下鼠标按钮时,会触发 onmousedown 事件;

l   当释放鼠标按钮时,会触发 onmouseup 事件;

l   最后,当完成鼠标点击时,会触发 onclick 事件.

实例:

<div onmousedown="mDown(this)" onmouseup="mUp(this)"onclick="mClick(this)" style="width:90px;height:20px;">请点击这里</div>

<script>

function mDown(obj)

{

obj.style.backgroundColor="#1ec5e5";

obj.innerHTML="请释放鼠标按钮";

}

function mUp(obj)

{

obj.style.backgroundColor="green";

obj.innerHTML="请按下鼠标按钮";

}

function mClick(obj){ obj.innerHTML="click";}

</script>

6). onfocus、onblur事件

     获得和失去焦点事件

实例:

<script>

function focusFun(x)

{

x.style.background="yellow";

}

functionblurFun(x)

{

x.style.background="#fff";

}

</script>

<input type="text" onfocus="focusFun(this)"onblur=" blurFun(this)">

四 JavaScript HTML DOM 元素(节点)

1. 添加节点(HTML 元素)

添加新HTML DOM元素,首先创建该元素(元素节点),然后向一个已存在的元素追加该元素

1)       创建HTML元素

document.createElement(Element)

2)       向elementNode节点内的子元素末追加元素

(向节点的子节点列表的末尾添加新的子节点)

elementNode.appendChild(newElement)

3)       向elementNode节点内某个子元素前插入元素

(在已有的子节点前插入一个新的子节点)

elementNode.insertBefore(new_node,existing_node)

new_node         要     插入新的节点

existing_node  已有节点,在此节点前插入新节点

4)       创建文本节点

document.createTextNode(contents)

实例:

<div id="div1">

<p id="p1">这是一个段落</p>

<p id="p2">这是另一个段落</p>

</div>

<script>

varpara=document.createElement("p");

var node=document.createTextNode("这是新段落。");

para.appendChild(node);

varelement=document.getElementById("div1");

element.appendChild(para);

</script>

2.删除节点(HTML 元素)

如需删除 HTML 元素,您必须首先获得该元素的父元素

删除子节点, 如成功,则返回被删除的节点,否则返回 NULL。

elementNode.removeChild(node)

elementNode父节点    node 子节点

实例一:显示找到父元素,再删除子元素

<div id="div1">

<p id="p1">这是一个段落。</p>

<p id="p2">这是另一个段落。</p>

</div>

<script>

varparent=document.getElementById("div1");

varchild=document.getElementById("p1");

parent.removeChild(child);

</script>

实例二:间接通过父元素删除子元素

varchild=document.getElementById("p1");

child.parentNode.removeChild(child);

3. lastChild 属性

lastChild 属性返回文档的最后一个子节点

documentObject.lastChild

4. previousSibling属性

previousSibling属性可返回某节点之前紧跟的节点(处于同一树层级)

如果没有此节点,那么该属性返回 null。

nodeObject.previousSibling

5. nodeType属性

         nodeType 属性返回被选节点的节点类型。

elementNode.nodeType

节点编号对应节点名称

节点编号

节点名称

节点编号

节点名称

1

Element

7

Processing Instrucion

2

Attribute

8

Comment

3

Text

9

Document

4

CDATA

10

Document Type

5

Entity Reference

11

Document Fragment

6

Entity

12

Notation

删除节点实例:

<scripttype="text/javascript">

//检查最后一个节点是否是元素节点

function get_lastchild(n)

{

var x=n.lastChild;

while (x.nodeType!=1)

{

x=x.previousSibling;

}

return x;

}

xmlDoc=loadXMLDoc("/example/xdom/books.xml");

varlastNode=get_lastchild(xmlDoc.documentElement);

vardelNode=xmlDoc.documentElement.removeChild(lastNode);

</script>

注:所有举例均参照于http://www.w3school.com.cn

JavaScript HTML DOM学习记录的更多相关文章

  1. Javascript之Dom学习

    1.简介:DOM是一套对文档的内容进行抽象和概念化的方法.在现实世界里,人们对"世界对象模型"一定不会陌生,当人们用"房子","汽车"等这一 ...

  2. JavaScript基础知识点学习记录

    一.简介: JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言,同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如相应用户的各种操作. J ...

  3. Javascript and DOM学习

    1.输出 document.write.(); 2.alert警告 3.confirm消息对话框:当用户点击"确定"按钮时,返回true,取消时,返回false 4.prompt提 ...

  4. JavaScript学习记录一

    title: JavaScript学习记录一 toc: true date: 2018-09-11 18:26:52 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

  5. JavaScript DOM学习总结(一)

    DOM 什么是DOM?简单地说DOM是一套对文档内容进行抽象和概念化的方法.   W3C给出的DOM定义是这样的:"一个与系统平台和编程语言无关的接口,程序和脚本以通过这个接口动态的访问和修 ...

  6. Javascript中DOM技术的的简单学习

    第十四课DOM技术概述1:DOM概述 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节 ...

  7. JavaScript学习记录四

    title: JavaScript学习记录四 toc: true date: 2018-09-16 20:31:22 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

  8. JavaScript学习记录三

    title: JavaScript学习记录三 toc: true date: 2018-09-14 23:51:22 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

  9. JavaScript学习记录二

    title: JavaScript学习记录二 toc: true date: 2018-09-13 10:14:53 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

随机推荐

  1. [Lua快速了解一下]Lua的model

    我们可以直接使用require(“model_name”)来载入别的lua文件,文件的后缀是.lua.载入的时候就直接执行那个文件了.比如: 我们有一个hello.lua的文件: print(&quo ...

  2. [CentOS]使用yum命令报出Error: Cannot retrieve repository metadata (repomd.xml) for repository的解决方法

    在一次错误的repo文件rpm -i 之后,执行yum就开始报出 Error: Cannot retrieve repository metadata (repomd.xml) for reposit ...

  3. nutch2.1+mysql+elasticsearch整合linux单机部署

    这次主要介绍下nutch2.1和mysql和elasticsearch的整合,是在单机上运行,并不是分布式部署.1.下载nutch2.1 nutch下载地址:http://labs.mop.com/a ...

  4. consul ACL2

    简介 Consul有多个组件,但是整体上,consul通常作为服务发现工具来使用. Consul主要由以下特点: 服务发现 健康检查 KV存储 多数据中心 Consul一般与zookeeper,ser ...

  5. Android 开发怎样做代码加密或混淆?

    欢迎访问网易云社区,了解更多网易技术产品运营经验. 在大公司怎么做android代码混淆的?发现他们的软件用apktool反编译居然没看到classes.dex文件和当前安卓APP加固到底该如何做到防 ...

  6. 算法 UVA 11292

    ***从今天开始自学算法. ***代码是用c++,所以顺便再自学一下c++ 例题1  勇者斗恶龙(The Dragon of Loowater, UVa 11292) 你的王国里有一条n个头的恶龙,你 ...

  7. 小程序:怎么在两层列表循环(wx:for)的时候判断是否为最后一个元素

    问题说明: 如下图所示,在箭头所指的最后一个选项的底线与底部操作栏的上边线重叠,需要清除掉最后一个元素的底线: 想到的解决方案:  通过判断是否为最后一个元素,然后通过条件渲染(wx:if)动态添加对 ...

  8. CSS:如何清除a标签之间的默认留白间距

    即使我们使用了类似 *{margin: 0;padding: 0;} 这样的代码重置了浏览器默认样式,也会发现类似<a>标签这种inline-block元素,它们之间也还存在着间距. de ...

  9. eclipse - maven使用国内镜像

    1 使用 maven 插件 - 官网下载 2 修改 eg : apache-maven-3.6.0-bin\apache-maven-3.6.0\conf\ setting.xml - 可备份下 3 ...

  10. Android学习之 adb被占用解决办法

    1.adb被占用解决办法 方法一:(1)查看5037端口哪个进程在用          netstat -a -o 5037 (2)查看上面进程是哪个执行文件在占用          tasklist ...