DOM基础知识

一、DOM概

  1. 何为DOM
    DOM,即Document Object Model(文档对象模型),是一种Web API,它将HTML或XML文档表示为一个树形结构,每个节点都是一个对象,从而使开发者可以使用脚本语言(例如JavaScript)动态地访问和修改文档内容、结构和样式。

  2. 何为Web API
    Web API是一种由Web浏览器提供的编程接口,它允许开发者通过JavaScript等脚本语言与浏览器进行交互,从而实现动态网页和丰富的Web应用程序。

  3. DOM的用处
    DOM有以下几个用处:
    可以实现动态网页和丰富的Web应用程序;
    可以动态地修改文档内容、结构和样式,使Web页面更加灵活和交互;
    可以获取和操作页面元素,从而实现与用户的交互和数据处理;
    可以进行事件绑定和处理,响应用户的操作和交互。

二、DOM详

1. 获取元素

注意,获取元素即,将HTML中的元素获取为对象,因为不怎么发生变化所以最好用const声明(pink老师是这样说的)。
(1). 根据ID和标签名获取页面元素
可以使用document.getElementById() 方法根据元素的ID属性获取页面元素(返回一个对象)。
可以使用document.getElementsByTagName() 方法根据元素的标签名获取页面元素(返回一个类似对象数组的东西)。
例如:

html:

<div id="myDiv">Hello World!</div>
<div class="myClass">Hello World!</div>
<div class="myClass">Hello DOM!</div>

javascript:

const myDiv = document.getElementById("myDiv");
const myClass = document.getElementsByTagName("div");

(2). 根据HTML5新增获取页面元素
HTML5新增了几种获取页面元素的方法,包括document.querySelector()document.querySelectorAll() 方法。
document.querySelector()方法返回匹配指定CSS选择器的第一个元素(返回一个对象),
document.querySelectorAll()方法返回匹配指定CSS选择器的所有元素(返回一个类似对象数组的东西)。
注意,即使document.querySelectorAll()方法中指定CSS选择器的所有元素只有一个,返回的也是一个对象数组。
例如:

html:

<div class="myClass">Hello World!</div>
<div class="myClass">Hello DOM!</div>

javascript:

const myClass = document.querySelector(".myClass"); // 返回第一个匹配的元素
const myClasses = document.querySelectorAll(".myClass"); // 返回所有匹配的元素

(3). 获取特殊元素
除了普通的页面元素,还有一些特殊的元素,例如document对象和window对象。可以使用document和window变量来获取这些特殊元素。例如:

const myDocument = document; // 获取document对象
const myWindow = window; // 获取window对象

2. 操作元素

在DOM中,可以通过各种方法来操作元素,包括改变元素内容、修改元素属性、表单元素属性的操作、样式属性操作以及自定义属性操作等。

(1). 改变元素内容
可以使用innerText和innerHTML属性来获取或设置元素的内容。
注意innerText不识别标签,而innerHTML可以。
例如:

const myDiv1 = document.getElementById("myDiv1");
const myDiv2 = document.getElementById("myDiv2");
myDiv1.innerText = "Hello World!";
myDiv2.innerHTML = "<b>Hello World!<b>";

(2). 修改元素属性

  • 可以使用setAttribute()和getAttribute()方法来修改和获取元素的属性。例如:
const myDiv = document.getElementById("myDiv");
myDiv.setAttribute("class", "myClass"); // 设置class属性为myClass
alert(myDiv.getAttribute("class")); // 获取class属性的值
  • 样式属性操作
    可以使用style对象来操作元素的样式属性。例如:
const myDiv = document.getElementById("myDiv");
myDiv.style.color = "red"; // 修改颜色属性为红色
  • 表单元素属性的操作
    可以使用value属性来获取或设置表单元素的值。例如:

html:

<input type="text" id="myInput">

javascript:

const myInput = document.getElementById("myInput");
myInput.value = "Hello World!";

注意,想要禁用某个表单则将其disable属性设为true。

  • 自定义属性操作
    HTML5中规定可以为元素添加非标准的属性,但要添加前缀"data-“,而dataset则相当于一个自定义属性的集合(里面的元素没有前缀"data-”),可以使用dataset属性来获取或设置自定义属性。

例如:

html:

<div id="myDiv" data-name="myData"></div>

javascript:

const myDiv = document.getElementById("myDiv");
alert(myDiv.dataset.name); // 获取data-name属性的值
myDiv.dataset.name = "newData"; // 设置data-name属性为newData

3. 事件

(1). 什么是事件
事件是指用户在Web页面上进行的各种操作,例如单击、双击、鼠标移动等。事件可以通过JavaScript等脚本语言进行监听和处理,从而实现动态交互和响应。
(2). 常见事件
常见的事件包括:

鼠标事件:单击、双击、鼠标移动、鼠标进入、鼠标离开等;
请添加图片描述

键盘事件:按键按下、按键释放、按键保持按下等;
请添加图片描述

表单事件:提交表单、重置表单、表单元素失去焦点、表单元素获得焦点等;
请添加图片描述

窗口事件:页面加载完成、页面关闭、页面滚动、窗口大小改变等。

(3). 执行事件的步骤
执行事件的步骤如下:

选择要监听的页面元素;
注册事件监听器(即指定要执行的JavaScript代码);
用户进行操作时,触发事件;
浏览器自动执行注册的事件监听器中的代码。
  • 注册事件
    (传统方法‘on+事件=’这种方法同一个事件只能注册一个处理函数,后注册的函数会覆盖原函数,这种方法很不方便)

可以使用addEventListener(event,listenner,useCapture)方法来注册事件监听器。该方法接受三个参数:

event 事件类型字符串,比如click,mouseover,不要加on
listener 事件处理函数,事件发生时,会调用该监听函数
useCapture 可选参数,是一个布尔值,默认是false

例如:

const myDiv = document.getElementById("myDiv");
myDiv.addEventListener("click", function() {
  alert("Hello World!");
});
  • 删除(解绑)事件
    可以使用removeEventListener(event,listenner,useCapture)方法来删除事件监听器。
    该方法接受三个参数(同上):要删除的事件类型、事件处理函数、是否在捕获阶段处理事件(可选,默认为false)。
    例如:
const myDiv = document.getElementById("myDiv");
function myFunction() {
  alert("Hello World!");
}
myDiv.addEventListener("click", myFunction);
myDiv.removeEventListener("click", myFunction);

(4). 事件流
事件流指的是事件从页面中接收的顺序,分为捕获阶段、目标阶段和冒泡阶段。
请添加图片描述

默认情况下,事件是从最外层的元素开始捕获,然后到达目标元素,最后从目标元素开始冒泡直到最外层的元素。
请添加图片描述
可以使用addEventListener()方法的第三个参数来控制事件的流程。例如:

const myDiv = document.getElementById("myDiv");
myDiv.addEventListener("click", function() {
  alert("Hello World!");
}, true); // 捕获阶段处理事件

(5). 事件对象
理解:在触发DOM 上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息,比如谁绑定了此事件,鼠标或者键盘的位置等。
事件处理函数中(event对象会被传入作为参数),可以通过事件对象来获取有关事件的信息,例如事件的类型、事件的目标元素、鼠标的位置等。可以使用event变量来访问事件对象。例如:
请添加图片描述

const myDiv = document.getElementById("myDiv");
myDiv.addEventListener("click", function(event) {
  alert("Event type: " + event.type); // 输出事件类型
  alert("Event target: " + event.target); // 输出事件目标元素
  alert("Mouse position: " + event.clientX + ", " + event.clientY); // 输出鼠标位置
});

4. 节点操作

在DOM中,节点是构成文档的基本单元。节点可以是元素、文本、注释等。
以下则是主要节点的类型:
请添加图片描述
注意,节点的nodeType类型是一组常量,如element的nodeType=1。
节点可以进行创建、添加、删除、复制等操作。

(1). 基本属性
在DOM中,所有节点都是Node对象的实例。节点的属性包括:

nodeType:节点类型,可以是元素节点、文本节点、注释节点等;
nodeName:节点名称,可以是元素节点的标签名、文本节点的#text等;
nodeValue:节点的值,可以是元素节点的null、文本节点的文本值等;

(2).父子节点

相关属性:

  • parentNode:父节点;
  • childNodes:子节点列表,其中包括一个NodeList对象(是一种类数组对象,可通过方括号语法访问,有length属性),并且能动态反映DOM结构(就是说,往父节点下添加了一个子节点的话,这一新节点也会在childNodes里);
  • firstChild:第一个子节点;
  • lastChild:最后一个子节点;

例如:

html:

<div id="myDiv">
  <p>Hello World!</p>
</div>

javascript:

const myDiv = document.getElementById("myDiv");
alert(myDiv.parentNode.nodeName); // 输出BODY
alert(myDiv.childNodes.length); // 输出1

(3). 兄弟节点
可以使用nextSibling属性和previousSibling属性来访问节点的下一个兄弟节点
和上一个兄弟节点。
可以使用nextElementSibling属性和previousElementSibling属性来访问节点的下一个元素兄弟节点和上一个元素兄弟节点。
例如:

html:

<div id="myDiv">
  <p>First</p>
  <p>Second</p>
  <p>Third</p>
</div>

javascript:

const secondP = document.getElementsByTagName("p")[1];
alert(secondP.previousSibling.nodeName); // 输出#text
alert(secondP.nextSibling.nodeName); // 输出P

(4). 创建和添加节点

  • document.creatElement(‘tagName’) 创建由 tagName 指定的 HTML 元素,也称为动态创建元素节点。
  • node.appendChild(child) 方法将一个节点添加到指定父节点的子节点列表的末尾.
  • node.insertBefore(child,指定元素) 将一个节点添加到父节点的指定子节点前面(若要添加到末尾参数为"(child,null)")。

例如:

html:

<div id="myDiv"></div>

javascript:

const myDiv = document.getElementById("myDiv");
const newP = document.createElement("p");
const newText = document.createTextNode("Hello World!");
newP.appendChild(newText);
myDiv.appendChild(newP);

(5). 删除和替换节点

  • removeChild()方法,从文档中删除节点。
  • replaceChild()方法,从文档中替换节点,两个参数,要插入的节点和要替换的节点。
    例如:

html:

<div id="myDiv">
  <p>Hello World!</p>
  <p>Hello World!</p>
</div>

javascript:

const myDiv = document.getElementById("myDiv");
const myP1 = myDiv.getElementsByTagName("p")[0];
const myP2 = myDiv.getElementsByTagName("p")[1];
const newP = document.createElement("p");
myDiv.removeChild(myP1);
myDiv.replaceChild(newP,myP2);

(6). 复制节点

  • cloneNode()方法,复制节点。例如:

html:

<div id="myDiv">
  <p>Hello World!</p>
</div>

javascript:

const myDiv = document.getElementById("myDiv");
const newDiv = myDiv.cloneNode(true); // 深度复制
document.body.appendChild(newDiv);
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
操作 HTML 元素和 CSS 样式是 JavaScript 中重要的 DOM 操作。以下是一些心得: 1. 获取元素:可以使用 `document.getElementById()`、`document.getElementsByClassName()`、`document.getElementsByTagName()` 和 `document.querySelector()` 等方法来获取 HTML 元素。这些方法都返回一个元素对象,可以使用这个对象来操作元素。 2. 操作元素属性:可以使用 `element.attribute` 或 `element.getAttribute()` 来获取元素属性,使用 `element.attribute = value` 或 `element.setAttribute(attribute, value)` 来设置元素属性。例如,可以使用 `element.style.backgroundColor` 或 `element.style["background-color"]` 来设置元素的背景颜色。 3. 操作元素内容:可以使用 `element.innerHTML` 或 `element.textContent` 来获取或设置元素的内容。 `innerHTML` 返回元素内部 HTML,而 `textContent` 返回元素内部文本。 4. 操作元素样式:可以使用 `element.style` 对象来设置元素样式。例如,可以使用 `element.style.backgroundColor` 或 `element.style["background-color"]` 来设置元素的背景颜色。也可以使用 `element.classList` 对象来添加、删除或切换元素的 CSS 类。 5. 动态创建元素:可以使用 `document.createElement()` 方法创建新的元素,使用 `element.appendChild()` 方法将新元素添加到文档中。例如,可以使用以下代码创建一个新的 `<div>` 元素,并将其添加到文档中: ```javascript var newDiv = document.createElement("div"); newDiv.innerHTML = "This is a new div!"; document.body.appendChild(newDiv); ``` 6. 事件处理程序:可以使用 `element.addEventListener()` 方法来添加事件处理程序。例如,可以使用以下代码在单击按钮时显示警告框: ```javascript var button = document.getElementById("myButton"); button.addEventListener("click", function() { alert("Button clicked!"); }); ``` 以上是一些基本的操作 HTML 元素和 CSS 样式的技巧和心得。在实际开发中,可以根据具体需求采用不同的方法和技巧来操作 DOM

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值