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以及对应的左右子节点

javascript 复制代码
<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对象

javascript 复制代码
let element = document.getElementById('myID')
alert(element.innerHTML);

2. getElementsByClassName

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

javascript 复制代码
let items = document.getElementsByClassName('MyClassName');
console.log(items[0].innerHTML);

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

3. getElementsByTagName

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

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

4. querySelector

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

javascript 复制代码
let element = document.querySelector('.myClass')

举例:

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

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

5. querySelectorAll

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

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

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

6. getElementsByName

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

javascript 复制代码
let elements = document.getElementsByName('username');

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

javascript 复制代码
<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属性

javascript 复制代码
<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>链接元素的URL | getElementById("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属性,作为字符串处理多个类名

javascript 复制代码
let className = document.getElementById("myDiv").className;
document.getElementById("myDiv").className = "newClass";

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

javascript 复制代码
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 |

  1. 小练习

网页简易计算器

html 复制代码
<!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>
相关推荐
麒麟而非淇淋18 分钟前
AJAX 入门 day1
前端·javascript·ajax
架构文摘JGWZ20 分钟前
Java 23 的12 个新特性!!
java·开发语言·学习
2401_8581205320 分钟前
深入理解MATLAB中的事件处理机制
前端·javascript·matlab
leon62521 分钟前
优化算法(一)—遗传算法(Genetic Algorithm)附MATLAB程序
开发语言·算法·matlab
阿树梢24 分钟前
【Vue】VueRouter路由
前端·javascript·vue.js
锦亦之22331 小时前
QT+OSG+OSG-earth如何在窗口显示一个地球
开发语言·qt
我是苏苏1 小时前
Web开发:ABP框架2——入门级别的增删改查Demo
java·开发语言
姜太公钓鲸2331 小时前
c++ static(详解)
开发语言·c++
菜菜想进步1 小时前
内存管理(C++版)
c语言·开发语言·c++
2301_789985941 小时前
Java语言程序设计基础篇_编程练习题*18.29(某个目录下的文件数目)
java·开发语言·学习