HTML DOM 学习笔记【全】

什么是 HTML DOM?

HTML DOM 是:

  • HTML 的标准对象模型
  • HTML 的标准编程接口
  • W3C 标准

HTML DOM 定义了所有 HTML 元素的对象属性,以及访问它们的方法

换言之,HTML DOM 是关于如何获取、修改、添加或删除 HTML 元素的标准。

DOM Nodes

DOM 节点

根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点:

  • 整个文档是一个文档节点
  • 每个 HTML 元素是元素节点
  • HTML 元素内的文本是文本节点
  • 每个 HTML 属性是属性节点
  • 注释是注释节点

 父、子节点/兄弟节点

节点树中的节点彼此拥有层级关系。

我们常用父(parent)子(child)同胞(sibling)等术语来描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。

  • 在节点树中,顶端节点被称为根(root)。
  • 每个节点都有父节点、除了根(它没有父节点)。
  • 一个节点可拥有任意数量的子节点。
  • 同胞是拥有相同父节点的节点

HTML DOM 方法

HTML DOM 方法是我们可以在节点(HTML 元素)上执行的动作。

HTML DOM 属性是我们可以在节点(HTML 元素)设置和修改的值。

编程接口

可通过 JavaScript (以及其他编程语言)对 HTML DOM 进行访问。

所有 HTML 元素被定义为对象,而编程接口则是对象方法和对象属性。

方法是您能够执行的动作(比如添加或修改元素)。

属性是您能够获取或设置的值(比如节点的名称或内容)。

常用的DOM对象方法: 

访问 HTML 元素(节点)

访问 HTML 元素等同于访问节点

您能够以不同的方式来访问 HTML 元素:

getElementById() 方法

getElementById() 方法返回带有指定 ID 的元素引用:

document.getElementById("intro");

 上面的例子获取 id="intro" 的元素:

getElementsByTagName() 方法

getElementsByTagName() 返回带有指定标签名的所有元素。

document.getElementsByTagName("p");

上面的例子返回包含文档中所有 <p> 元素的列表: 

The getElementsByClassName() Method

如果您希望查找带有相同类名的所有 HTML 元素,请使用这个方法:

document.getElementsByClassName("intro");

上面的例子返回包含 class="intro" 的所有元素的一个列表

以下是 本人更推荐的一种获取元素的方式:

获取id=back的元素:

document.querySelector('#back') 

获取class=back的元素:

document.querySelector('.back')

获取标签为p的元素:

document.querySelector('p')

HTML DOM - 修改

修改 HTML = 改变元素、属性、样式和事件。

创建 HTML 内容

改变元素内容的最简单的方法是使用 innerHTML 属性。

下面的例子改变一个 <p> 元素的 HTML 内容:

 改变 HTML 样式

获取到想要改变样式的标签的id,通过style.+想要改变的属性='属性值'就可以直接改变样式:

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

创建新的 HTML 元素

如需向 HTML DOM 添加新元素,您首先必须创建该元素(元素节点),然后把它追加到已有的元素上。

<div id="div1">
<p id="p1">这是一个段落。</p>
<p id="p2">这是另一个段落。</p>
</div>
<script>
var para=document.createElement("p");
var node=document.createTextNode("这是一个新段落。");
para.appendChild(node);
var element=document.getElementById("div1");
element.appendChild(para);
</script>

 实例解析:

创建新的 HTML 元素 - insertBefore()

上一个例子中的 appendChild() 方法,将新元素作为父元素的最后一个子元素进行添加。

如果不希望如此,您可以使用 insertBefore() 方法:

<div id="div1">
<p id="p1">这是一个段落。</p>
<p id="p2">这是另外一个段落。</p>
</div>
 
<script>
var para=document.createElement("p");
var node=document.createTextNode("这是一个新段落。");
para.appendChild(node);
 
var element=document.getElementById("div1");
var child=document.getElementById("p1");
element.insertBefore(para,child);
</script>

这样就能将新创建的p标签para,追加到id为p1的child之前:

删除已有的 HTML 元素 - removeChild()

如需删除 HTML 元素,您必须清楚该元素的父元素:

<div id="div1">
    <p id="p1">这是一个段落。</p>
    <p id="p2">这是另一个段落。</p>
</div>
<script>
var parent=document.getElementById("div1");
var child=document.getElementById("p1");
parent.removeChild(child);
</script>

先查找到id为div1的元素,再查找到id为p1的元素,再从父元素中删除子元素。

第一个p标签被删除。

注意点: 如果不引用父元素的话是不能删除子元素的

在不知道父元素的情况下,可以先找到需要删除的子元素,然后使用 parentNode 属性来查找其父元素:

var child=document.getElementById("p1");
child.parentNode.removeChild(child);

替换 HTML 元素 - replaceChild()

如需替换 HTML DOM 中的元素,请使用 replaceChild() 方法:

<div id="div1">
<p id="p1">这是一个段落。</p>
<p id="p2">这是另外一个段落。</p>
</div>
 
<script>
var parent=document.getElementById("div1");
var child=document.getElementById("p1");
var para=document.createElement("p");
var node=document.createTextNode("这是一个新的段落。");
para.appendChild(node);
parent.replaceChild(para,child);
</script>

id为p1的p标签会被新创建的p标签替代。

HTML DOM使用事件

HTML DOM 允许您在事件发生时执行代码。

当事件发生时,可以执行 JavaScript,比如当用户点击一个 HTML 元素时。

如需在用户点击某个元素时执行代码,请把 JavaScript 代码添加到 HTML 事件属性中:

onclick=JavaScript

HTML 事件的例子:

  • 当用户点击鼠标时 -- onclick
  • 当用户进入页面时 -- onload
  • 当用户离开页面时 -- onunload
  • 当鼠标移动到元素上时 -- onmouseover
  • 当鼠标指针离开元素时 -- onmouseout
  • 当输入字段被改变时 -- onchange
  • 某个鼠标按钮被点击时 -- onmousedown
  • 鼠标按钮被松开时 -- onmouseup

HTML DOM 事件对象 | 菜鸟教程 (runoob.com)https://www.runoob.com/jsref/dom-obj-event.html

使用案例:

<!DOCTYPE html>
<html><head>
<meta charset="utf-8">
</head>
<body>

<div onmouseover="mOver(this)" onmouseout="mOut(this)" style="background-color:#D94A38;width:120px;height:20px;padding:40px;">Mouse Over Me</div>

<script>
function mOver(obj)
{
	obj.innerHTML="Thank You"
}

function mOut(obj)
{
	obj.innerHTML="Mouse Over Me"
}
</script>

</body>
</html>

鼠标移入后: 

HTML DOM 导航

通过 HTML DOM,您能够使用节点关系在节点树中导航。

HTML DOM 节点列表

getElementsByTagName() 方法返回节点列表。节点列表是一个节点数组。

下面的代码选取文档中的所有 <p> 节点:

实例

var x=document.getElementsByTagName("p");

可以通过下标号访问这些节点。如需访问第二个 <p>,您可以这么写:

y=x[1];

注意点:下标从0开始。

HTML DOM 节点列表长度

length 属性定义节点列表中节点的数量。

您可以使用 length 属性来循环节点列表:

实例

x=document.getElementsByTagName("p"); 
for (i=0;i<x.length;i++) { 
document.write(x[i].innerHTML); 
document.write("<br>"); 
}

每打印一行就自动换行。

导航节点关系

使用三个节点属性:parentNode(父节点)、firstChild(第一个子节点) 以及 lastChild(最后一个子节点) ,在文档结构中进行导航。

DOM 根节点

有两个特殊的属性,可以访问全部文档:

  • document.documentElement - 全部文档
  • document.body - 文档的主体

childNodes 和 nodeValue

除了 innerHTML 属性,也可以使用 childNodes 和 nodeValue 属性来获取元素的内容。

下面的代码获取 id="intro" 的 <p> 元素的值:

<p id="intro">Hello World!</p>
 
<script>
txt=document.getElementById("intro").childNodes[0].nodeValue;
document.write(txt);
</script>

 会打印出来两行 Hello World!

DOM 实例 | 菜鸟教程 (runoob.com)https://www.runoob.com/htmldom/htmldom-examples.html

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值