JavaScript - 对象编程之详解DOM对象

1. 文档对象模型(DOM)

HTML DOM全称为HTML Document Object Model,专门适用于HTML/XHTML文档的对象模型。可以将HTML DOM理解为网页的API,将网页中的各种元素都看作一个对象,从而使网页中的元素也可以被计算机语言获取或编辑。

在使用DOM进行解析HTML对象的时候,首先在内存中构建一个完整的解析树,借此实现对整个XML文档的全面,动态访问。解析是有层次的,所有的HTML中的元素都解析成树上层次分明的节点,然后我们可以对这些节点执行添加,删除,修改以及查看等操作。

使用DOM对象常用于页面的一般显示,一般计算等功能。

2. 获取对象的方法

根节点由document对象表示 - 类比于HTML中的<html>标签

将document看作一棵树,获取跟节点的node以及对应的左右子节点

<script type='text/javascript'>
    var Origin = document.documentElement;
    alert(Origin.nodeName);
    var left_node = Origin.firstChild;
    alert(left_node);
    var right_node = Origin.leftChild;
    //可以一直循环,找到找到所有的标签
</script>

上述方法比较费时费力,在JavaScript中,可以通过多种方式获取和操作DOM

但通过以下所获取的内容是HTML文档中的标签内容,需要功能的增添还需要调用标签内部中的属性。

1. getElementById

通过元素的id获取DOM对象

let element = document.getElementById('myID')
alert(element.innerHTML);

2. getElementsByClassName

通过元素的class获取一组DOM对象,返回的是HTMLCollection(可以看做一个对象列表)

let items = document.getElementsByClassName('MyClassName');
console.log(items[0].innerHTML);

想要获取具有相同类名的多个元素时使用

3. getElementsByTagName

通过元素的标签名获取一组DOM对象,返回的是HTMLCollection

<html>
<p>1</p>
</html>
<script>
let paragraphs = document.getElementsByTagName('p');
console.log(paragraphs[0].innerHTML);
</script>

4. querySelector

通过CSS选择器获取第一个匹配的DOM对象

let element = document.querySelector('.myClass')

举例:

<div class='myClass'>Item 1</div>
<script>
    let item = document.querySelector('.myClass');
    console.log(item.innerHTML);
</script>

使用复杂的CSS选择器获取单个元素时使用最佳

5. querySelectorAll

通过CSS选择器获取所有匹配的DOM对象,返回NodeList

返回的NodeList可以任意取得想要的元素

let elements = document.querySelectorAll('.myClass');
<script>
    let items = document.querySelectorAll('.myClass');
    console.log(items[1].innerHTML);
</script>

6. getElementsByName

通过元素的name属性获取一组DOM对象,常用于表单元素

let elements = document.getElementsByName('username');

处理表单中具有相同name的多个元素时经常使用

<input type="text" name="username" value="Alice">
<input type="text" name="username" value="Bob">
<script>
    let usernames = document.getElementsByName("username");
    console.log(usernames[0].value);  // 输出: Alice
</script>

3. 事件驱动

通常鼠标或热键的动作称之为事件(Event),而由鼠标或热键引发的一连串程序动作,称之为事件驱动(Event Driver),而针对事件进行处理程序或函数,我们称之为事件处理程序(Event Handler)

主要事件:

• 引起页面之间跳转的事件,主要是超链接是假

• 事件浏览器自己引起的事件

• 事件在表单内部同界面对象交互

在之后专门一篇文章详解JavaScript中各个事件与其交互

4. DOM属性

<div id="myDiv">Hello, <b>world</b>!</div>

<script>
    let content = document.getElementById("myDiv").innerHTML;
    console.log(content);  // 输出: Hello, <b>world</b>!
</script>

总结:

• 内容相关:innerHTML, innerText, textContent, value, placeholder

• 样式与类:style, className, classList

• 表单相关:disabled, checked, readOnly

1. 内容相关

属性作用用法
innerHTML获取标签中的HTML,包括文档与标签getElementById("myDiv").innerHTML
innerText获取或设置元素的纯文本内容getElementById("myDiv").innerText
textContent获取或设置元素及其子元素的文本内容getElementById("myDiv").textContent
value用于获取或设置表单元素,如<input><textarea>的值getElementById("myDiv").value
src获取或设置图片,音视频等元素的资源路径;当前页面getElementById("myDiv").src
href获取或设置<a>链接元素的URLgetElementById("myDiv").href
placeholder获取或设置输入框<input><textarea>的占位符文本getElementById("myDiv").placeholder='';
attributes获取元素的所有属性getElementById("myDiv").attributes
title获取或设置元素的title属性,用于鼠标悬停时的提示文本getElementById("myDiv").title = "New tooltip text";

2. 样式与类

属性作用用法
style用于获取或设置元素的内联样式属性getElementById("myDiv").style.color
id获取或设置元素的id属性getElementById("myDiv").id = 'xxx'

className/

classList

如下所示如下所示

className:获取或设置元素的class属性,作为字符串处理多个类名

let className = document.getElementById("myDiv").className;
document.getElementById("myDiv").className = "newClass";

classList:提供对类名进行添加,删除,切换的更便捷方法

document.getElementById("myDiv").classList.add("newClass");
document.getElementById("myDiv").classList.remove("oldClass");
document.getElementById("myDiv").classList.toggle("toggleClass");

3. 表单相关

disabled获取或设置表单元素是否禁用getElementById("myCheckbox").disabled = true;
checked

用于获取或设置复选框<input type='checkbox'>或

单选框<input type='radio'>的选中状态

getElementById("myCheckbox").checked = true;
readOnly获取或设置表单元素是否为只读状态getElementById("myInput").readOnly = true;
scrollTop/scrollLeft获取或设置元素的滚动条位置getElementById("myDiv").scrollTop = 100; // 滚动到 100px

4. 小练习

网页简易计算器

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>第一个JavaScript程序</title>
		<style>
		label
		{
			width:100px;
			text-align:right;
			display:block;
			float:left;
		}
		section
		{
			width:260px;
			text-align:center;
		}
		</style>
		<script src='js/new.js'></script>
		<!-- 如果进行引用,在<script></script>之间不允许有代码 -->
	</head>
	<body>
		<section>
			<form name='myform' action='' method='get'>
				<p><label>汇款金额:</label><input type='text' name='txt'></p>
				<p><label>手续费:</label><input type='text' name='txtfee' readonly></p>
				<p><input type='button' value='确定' onclick='calc()'></p>
				<p><input type='button' onclick="appear()"></p>
				<p><input type='text' name='appea' readonly></p>
				<p><input type='button' value='计算' onclick='CalcF()'></p>
				<p><input type='text' name='textstring'></p>
				<p><input type='button' value='check' onclick='isRight()'></p>
			</form>
		</section>
	</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值