JavaScript文档对象模型

JavaScript 文档对象模型(Document Object Model,简称 DOM)是一个编程接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。DOM 将整个文档(如 HTML 文档)表示为一个由节点(Node)和对象(如元素对象、属性对象、文本对象等)组成的树状结构。

以下是关于 DOM 的一些基本概念和用法:

  1. 节点(Node)
    • DOM 中的一切都被视为节点。例如,元素、属性、文本都是节点。
    • 节点之间存在父子、兄弟等关系。
  2. 元素节点(Element Node)
    • HTML 元素(如 <p><div><a> 等)在 DOM 中表示为元素节点。
    • 可以通过 document.getElementById()document.querySelector() 等方法获取元素节点。
  3. 属性节点(Attribute Node)
    • 元素的属性(如 <a href="..."> 中的 href)在 DOM 中表示为属性节点。
    • 可以通过 element.getAttribute() 和 element.setAttribute() 方法获取和设置属性。
  4. 文本节点(Text Node)
    • 元素内部的文本(如 <p>Hello, world!</p> 中的 "Hello, world!")在 DOM 中表示为文本节点。
    • 可以通过 element.textContent 或 element.innerText 获取和设置文本内容。
  5. 操作 DOM
    • 可以通过 JavaScript 创建、修改、删除 DOM 节点。
    • 例如,使用 document.createElement() 创建新元素,使用 parentNode.appendChild() 将新元素添加到文档中,使用 parentNode.removeChild() 删除元素等。
  6. 事件处理
    • DOM 提供了事件模型,允许为文档中的元素注册事件处理程序(如点击事件、鼠标移动事件等)。
    • 当触发相应事件时,事件处理程序会被执行。
  7. 遍历 DOM
    • 可以使用各种属性和方法遍历 DOM 树,如 parentNodechildNodesfirstChildlastChildpreviousSiblingnextSibling 等。
  8. 修改样式
    • 可以通过 JavaScript 修改元素的样式。这可以通过直接修改元素的 style 属性或使用 window.getComputedStyle() 方法来实现。

了解 DOM 是前端开发的基础,它使开发人员能够使用 JavaScript 动态地操作网页内容、结构和样式。

在JavaScript中,有多种方法可以查找HTML元素。以下是一些常用的方法:

  1. 通过ID查找:
    如果你知道元素的ID,可以使用document.getElementById()方法。例如:

    var element = document.getElementById('myElementId');

    2.通过类名查找:
    如果你想查找具有特定类名的所有元素,可以使用document.getElementsByClassName()方法。注意这个方法返回的是一个类数组对象(HTMLCollection),而不是单个元素。例如:

    var elements = document.getElementsByClassName('myClassName');  
    // 使用elements[0]访问第一个元素

    通过标签名查找:
    如果你只想通过HTML标签名查找元素,可以使用document.getElementsByTagName()方法。同样,这个方法也返回的是一个类数组对象。例如:

    var elements = document.getElementsByTagName('p');  
    // 使用elements[0]访问第一个<p>元素

    通过选择器查找(querySelector 或 querySelectorAll):
    document.querySelector()方法返回文档中匹配指定CSS选择器的第一个Element元素。而document.querySelectorAll()方法返回文档中匹配指定CSS选择器的所有Element元素的NodeList(静态的)。例如:

    // 查找第一个匹配的元素  
    var element = document.querySelector('.myClassName');  
    
    // 查找所有匹配的元素  
    var elements = document.querySelectorAll('.myClassName');  
    // 使用elements[0]访问第一个匹配的元素

    通过父元素查找子元素:
    如果你有一个元素的引用,并想查找它的子元素,可以使用parentNode.children(所有子元素)或parentNode.firstElementChildparentNode.lastElementChildparentNode.previousElementSiblingparentNode.nextElementSibling等属性。例如:

    var parent = document.getElementById('parentId');  
    var firstChild = parent.firstElementChild;  
    var lastChild = parent.lastElementChild;

    通过表单元素查找:
    对于表单元素,如<input><textarea><select>等,可以使用document.forms['formName'].elements['elementName']document.forms.formName.elementName进行查找。例如:

    var inputElement = document.forms['myForm'].elements['myInputElement'];  
    // 或者  
    var inputElement = document.forms.myForm.myInputElement;

    使用jQuery(如果项目中包含jQuery库):
    如果你在使用jQuery库,那么可以使用更加简洁和强大的选择器语法来查找元素。例如:

    var element = $('#myElementId'); // 通过ID查找  
    var elements = $('.myClassName'); // 通过类名查找

    选择哪种方法取决于你的具体需求和你对HTML文档结构的了解程度。如果你知道确切的ID或类名,那么getElementByIdquerySelector可能是最直接的方法。如果你需要查找多个元素或基于更复杂的条件查找元素,那么getElementsByClassNamegetElementsByTagNamequerySelectorAll可能更合适。

DOM HTML

当涉及到DOM(Document Object Model)和HTML时,我们实际上是在讨论如何使用JavaScript来操作HTML文档的结构、内容和样式。DOM是HTML和XML文档的编程接口,它定义了一种方式来表示和修改文档的结构和内容。

以下是一些使用DOM来操作HTML的常见示例:

1. 获取HTML元素

  • 使用 document.getElementById(id)
  • 使用 document.querySelector(selector) 或 document.querySelectorAll(selector)
  • 使用 document.getElementsByClassName(className)
  • 使用 document.getElementsByTagName(tagName)

2. 修改HTML元素内容

  • 修改元素的 innerHTML 属性
  • 修改元素的 textContent 属性(不包含HTML标签)
var element = document.getElementById('myElement');  
element.innerHTML = '<h1>新的标题</h1>';  
element.textContent = '新的文本内容';

 

3. 修改HTML元素属性

  • 使用 element.setAttribute(name, value)
  • 使用 element.getAttribute(name)
  • 使用 element.removeAttribute(name)
 

javascript复制代码

var link = document.getElementById('myLink');
link.setAttribute('href', 'https://example.com');
console.log(link.getAttribute('href')); // 输出: https://example.com
link.removeAttribute('href');

4. 创建新的HTML元素

  • 使用 document.createElement(tagName)
  • 使用 parentNode.appendChild(childNode) 或 parentNode.insertBefore(newNode, referenceNode)
 

javascript复制代码

var newElement = document.createElement('div');
newElement.textContent = '我是新创建的元素';
document.body.appendChild(newElement);

5. 删除HTML元素

  • 使用 parentNode.removeChild(childNode)
 

javascript复制代码

var element = document.getElementById('myElement');
element.parentNode.removeChild(element);

6. 监听HTML元素事件

  • 使用 element.addEventListener(eventType, callbackFunction)
 

javascript复制代码

var button = document.getElementById('myButton');
button.addEventListener('click', function() {
alert('按钮被点击了!');
});

7. 修改CSS样式

  • 直接修改元素的 style 属性
  • 使用 window.getComputedStyle(element, null).getPropertyValue(propertyName) 来读取计算后的样式值
 

javascript复制代码

var element = document.getElementById('myElement');
element.style.color = 'red';
element.style.backgroundColor = 'lightgray';
// 读取计算后的样式值
var computedStyle = window.getComputedStyle(element, null).getPropertyValue('color');
console.log(computedStyle); // 输出计算后的颜色值,可能是rgb(255, 0, 0)或其他格式

这些只是DOM操作HTML的一些基本示例。DOM API非常强大,允许你以编程方式几乎完全控制HTML文档。

DOM CSS

当涉及到DOM(Document Object Model)和CSS(Cascading Style Sheets)时,我们主要关注的是如何使用JavaScript通过DOM API来操作HTML元素的样式。CSS定义了如何在网页上呈现HTML元素,而DOM则提供了与这些元素交互的接口。

以下是一些使用DOM来操作CSS样式的常见方法:

1. 直接设置元素的内联样式

通过直接设置HTML元素的style属性,可以更改其内联样式。例如:

 

javascript复制代码

var element = document.getElementById('myElement');
element.style.color = 'red'; // 设置文本颜色为红色
element.style.fontSize = '20px'; // 设置字体大小为20像素

2. 使用CSS类来更改样式

通过更改元素的className属性,可以动态地添加、删除或更改元素的CSS类,从而应用或移除相应的样式。例如:

 

javascript复制代码

var element = document.getElementById('myElement');
element.className = 'new-class'; // 将元素的类设置为new-class
// 或者,如果你希望添加类而不是替换它
element.classList.add('new-class');
// 移除类
element.classList.remove('old-class');
// 切换类(如果存在则移除,否则添加)
element.classList.toggle('toggle-class');

3. 获取元素的计算样式

使用window.getComputedStyle()方法,可以获取元素的最终计算样式(即应用了所有CSS规则后的样式)。例如:

 

javascript复制代码

var element = document.getElementById('myElement');
var computedStyle = window.getComputedStyle(element, null);
var color = computedStyle.getPropertyValue('color'); // 获取元素的文本颜色
console.log(color); // 输出类似rgb(255, 0, 0)的值

4. 访问和修改CSS规则

虽然直接通过DOM API访问和修改CSS规则(如样式表中的规则)并不总是推荐的做法(因为它可能破坏封装和可维护性),但在某些情况下可能是必要的。这通常涉及到访问document.styleSheets集合,并遍历其中的规则。但是,请注意,这种方法在不同的浏览器之间可能存在差异,并且可能受到同源策略的限制。

5. 使用CSSOM API

CSS Object Model (CSSOM) 是DOM的一个扩展,它提供了对CSS样式信息的编程访问。虽然CSSOM API不如DOM API那样常用,但它提供了一些高级功能,如查询和修改CSS变量(也称为自定义属性)。

6. 监听样式更改

虽然DOM API本身不提供直接的样式更改事件监听器,但你可以通过其他方法(如MutationObserver API)来监听可能导致样式更改的DOM更改,或者定期轮询元素的样式属性来检测更改。

7. 使用现代前端框架和库

许多现代前端框架和库(如React、Vue、Angular等)提供了更高级、更声明式的样式处理方法,这些方法通常比直接使用DOM API更简洁、更易于维护。这些框架和库通常使用内联样式、CSS类、CSS模块、CSS-in-JS库或其他技术来管理样式。

DOM 事件

DOM(Document Object Model)事件是JavaScript与HTML交互的重要方式之一。当用户在HTML文档上执行某些操作时(如点击按钮、按下键盘上的键或移动鼠标等),会触发这些事件。通过JavaScript,我们可以监听这些事件,并在事件发生时执行相应的代码。

以下是一些常见的DOM事件类型及其用法:

1. 点击事件(Click Event)

当用户点击某个元素时触发。

 

javascript复制代码

var button = document.getElementById('myButton');
button.addEventListener('click', function() {
alert('按钮被点击了!');
});

2. 鼠标事件(Mouse Events)

  • mousedown:当鼠标按钮被按下时触发。
  • mouseup:当鼠标按钮被释放时触发。
  • mousemove:当鼠标指针在元素内部移动时触发。
  • mouseover:当鼠标指针进入元素时触发。
  • mouseout:当鼠标指针离开元素时触发。
 

javascript复制代码

var element = document.getElementById('myElement');
element.addEventListener('mouseover', function() {
// 鼠标指针进入元素时执行的代码
});

3. 键盘事件(Keyboard Events)

  • keydown:当键盘上的某个键被按下时触发。
  • keyup:当键盘上的某个键被释放时触发。
  • keypress:当键盘上的某个键被按下并产生一个可打印的字符值时触发(注意:在某些浏览器中已被弃用)。
 

javascript复制代码

document.addEventListener('keydown', function(event) {
if (event.key === 'Enter') {
// 当按下Enter键时执行的代码
}
});

4. 表单事件(Form Events)

  • submit:当表单提交时触发。
  • change:当表单元素的值改变时触发(如<input><select><textarea>)。
  • focus:当元素获得焦点时触发。
  • blur:当元素失去焦点时触发。
 

javascript复制代码

var form = document.getElementById('myForm');
form.addEventListener('submit', function(event) {
// 阻止表单的默认提交行为
event.preventDefault();
// 提交表单的自定义处理逻辑
});

5. 加载和滚动事件(Load and Scroll Events)

  • load:当页面或图像加载完成时触发。
  • scroll:当文档或元素滚动时触发。
 

javascript复制代码

window.addEventListener('load', function() {
// 页面加载完成后执行的代码
});
window.addEventListener('scroll', function() {
// 滚动时执行的代码
});

6. 拖放事件(Drag and Drop Events)

  • dragstart:当元素开始被拖动时触发。
  • drag:当元素在拖动过程中时触发。
  • dragend:当拖动操作结束时触发。
  • dragenter:当被拖动的元素进入某个元素时触发。
  • dragover:当被拖动的元素在目标元素上移动时触发。
  • dragleave:当被拖动的元素离开目标元素时触发。
  • drop:当被拖动的元素在目标元素上放下时触发。

7. 触摸事件(Touch Events)

这些事件主要用于移动设备上的触摸交互。

  • touchstart:当触摸点被放在触摸平面上时触发。
  • touchmove:当触摸点在触摸平面上移动时触发。
  • touchend:当触摸点从触摸平面上移除时触发。
  • touchcancel:当触摸操作被中断(如触摸点太多、浏览器窗口被其他内容遮挡等)时触发。

8. 自定义事件(Custom Events)

除了上述内置事件外,你还可以创建自定义事件并在适当的时候触发它们。这在创建可复用的组件或模块时非常有用。

 

javascript复制代码

var event = new CustomEvent('myCustomEvent', { detail: { message: 'Hello, world!' } });
document.dispatchEvent(event);
document.addEventListener('myCustomEvent', function(event) {
console.log(event.detail.message); // 输出 "Hello, world!"
});

在监听事件时,通常使用addEventListener方法,并传入事件类型和事件处理函数作为参数。事件处理函数会在指定的事件类型被触发时执行。此外,你还可以使用removeEventListener方法来移除之前添加的事件监听器。

DOM节点

DOM(Document Object Model)节点是构成HTML和XML文档的基础结构单元。在DOM中,文档被表示为树形结构,每个节点都是这棵树的一个部分。这些节点可以是元素节点、文本节点、属性节点、文档节点(对于整个文档)等。

以下是DOM节点的一些主要类型:

1. 元素节点(Element Nodes)

元素节点对应于HTML或XML文档中的标签。例如,<p><div><a>等都是元素节点。元素节点可以包含属性节点和子节点(包括元素节点和文本节点)。

2. 文本节点(Text Nodes)

文本节点包含文档中的文本内容。文本节点总是被包含在元素节点中。在HTML文档中,文本节点通常是由标签之间的文本构成的。

3. 属性节点(Attribute Nodes)

属性节点包含元素的属性信息。例如,在<img src="example.jpg" alt="Example Image">中,srcalt就是属性节点。属性节点总是被包含在元素节点中。

4. 文档节点(Document Node)

文档节点是DOM树的根节点,代表整个文档。在HTML文档中,文档节点对应于document对象。

5. 文档类型节点(Document Type Node)

文档类型节点(也称为DOCTYPE节点)在HTML文档中并不常见,但在XML文档中很有用。它包含了关于文档类型的声明信息。

6. 注释节点(Comment Nodes)

注释节点包含HTML或XML文档中的注释信息。在HTML中,注释以<!--开始,以-->结束。

7. 文档片段节点(Document Fragment Node)

文档片段节点是一种特殊的节点类型,它表示了一个不包含父节点的节点集合。文档片段节点常用于性能优化,因为它们不会在文档树中创建额外的节点,从而减少了对DOM的修改次数。

节点属性和方法

每个DOM节点都有一些属性和方法,用于获取或修改节点的信息。例如:

  • nodeName:返回节点的名称(对于元素节点,它是元素的标签名)。
  • nodeType:返回节点的类型(例如,元素节点的类型是1,文本节点的类型是3)。
  • nodeValue:对于文本节点和属性节点,返回节点的值;对于其他类型的节点,返回null。
  • parentNode:返回节点的父节点。
  • childNodes:返回一个包含节点的子节点的NodeList。
  • firstChild 和 lastChild:分别返回节点的第一个和最后一个子节点。
  • appendChild(node):将指定的节点添加到该节点的子节点列表的末尾。
  • removeChild(node):从该节点的子节点列表中移除指定的节点。
  • insertBefore(newNode, referenceNode):在指定的参考节点之前插入新的节点。
  • replaceChild(newNode, oldNode):用新的节点替换指定的旧节点。

通过使用这些属性和方法,你可以遍历DOM树、查找特定节点、修改节点内容等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/592891.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【莫比乌斯变换-03】python实现圆对圆的变换

文章目录 一、说明二、python实现复平面的莫比乌斯变换三、线的变换四、画笑脸 一、说明 我们在前面的文章中&#xff0c;叙述了莫比乌斯变换的复数分析&#xff0c;以及种种几何属性&#xff0c;本篇中叙述如何程序地实现&#xff1a;复平面上的圆在莫比乌斯变换下的图像是另…

【ONE·基础算法 || 回溯和剪枝(暴搜/深搜)】

总言 主要内容&#xff1a;编程题举例&#xff0c;熟悉理解回溯剪枝类题型&#xff08;如何画决策树&#xff0c;如何使用深搜进行递归&#xff0c;如何运用剪枝&#xff0c;如何在一维数组/二维数组中使用&#xff09;。 文章目录 总言1、回溯和剪枝2、全排列&#xff08;med…

【机器学习】BK- SDM与LCM的融合策略在文本到图像生成中的应用

突破边缘设备限制&#xff1a;BK-SDM与LCM的融合策略在文本到图像生成中的应用 一、引言二、稳定扩散算法的挑战与现状三、BK-SDM与LCM的融合策略利用高质量图像-文本对进行训练为LCM量身定制高级蒸馏过程 四、结论与展望 一、引言 随着人工智能技术的飞速发展&#xff0c;文本…

数据结构(十)----图

目录 一.图的概念 1.图的定义 2.图的类别 3.图的性质 4.几种特殊形态的图 二.图的存储结构 1.邻接矩阵&#xff08;顺序存储&#xff09; 2.邻接表&#xff08;顺序链式存储&#xff09; 3.十字链表 4.邻接多重表 四.图的遍历 1.广度优先遍历&#xff08;BFS&#…

Mysql复习笔记: 基础概念(待补充)

一. 基础概念 通用概念: 网络连接必须得分配给一个线程去进行处理&#xff0c;由一个线程来监听请求以及读取请求数据&#xff0c;比如从网络连接中读取和解析出来一条我们的系统发送过去的SQL语句 在数据库中&#xff0c;哪怕执行一条SQL语句&#xff0c;其实也可以是一个独立…

Python | Leetcode Python题解之第59题螺旋矩阵II

题目&#xff1a; 题解&#xff1a; class Solution:def generateMatrix(self, n: int) -> List[List[int]]:matrix [[0] * n for _ in range(n)]num 1left, right, top, bottom 0, n - 1, 0, n - 1while left < right and top < bottom:for col in range(left, r…

pandas学习笔记11

DataFrame结构 DataFrame 一个表格型的数据结构&#xff0c;既有行标签&#xff08;index&#xff09;&#xff0c;又有列标签&#xff08;columns&#xff09;&#xff0c;它也被称异构数据表&#xff0c;所谓异构&#xff0c;指的是表格中每列的数据类型可以不同&#xff0c;…

python中type,object,class 三者关系

type,object,class 三者关系 在python中&#xff0c;所有类的创建关系遵循&#xff1a; type -> int -> 1 type -> class -> obj例如&#xff1a; a 1 b "abc" print(type(1)) # <class int> 返回对象的类型 print(type(int)) …

力扣打卡第二天

206. 反转链表 class Solution { public:ListNode* reverseList(ListNode* head) {// //迭代法// ListNode *pre nullptr;// ListNode *curr head;// while(curr){// ListNode *next curr -> next;// curr -> next pre;// pre curr;// curr next;/…

Unity UGUI Image 点击事件忽略空白像素区域

我们会遇到图片不是方形的不规则图片。这个时候我们希望只有点击到图像内容本身才算点击&#xff0c;点击空白区域则不算点击。而UGUI对图片的处理是整个图片都会算作点击区域&#xff0c;这样不能满足于我们的使用需求了。 首先我们需要把图片本身的Read/Write 选项打开 然后…

质因数分解(cpp实现)--一种快速求得一个数有多少个因子的黑魔法

前言 最近机试没少吃不会质因数分解的亏&#xff0c;用传统的求得因子个数只能过一点点…(ex, 20%) 质因数分解后&#xff0c;可以将因子问题转化为 集合的组合问题&#xff0c;因此会很快&#xff0c;目测是 l o g n log n logn (n是该整数的值)。 传统解法 假设输入整数的…

基于OpenCv的图像特征点检测

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

从0开始linux(1)——文件操作

欢迎来到博主的专栏——从0开始linux 博主ID&#xff1a;代码小豪 博主使用的linux发行版是&#xff1a;CentOS 7.6 不同版本下的操作可能存在差异 文章目录 命令文件操作命令文件树和文件路径文件树绝对路径相对路径 文件属性tree指令删除文件复制文件 大家还记得在小学第一次…

C语言-链表实现贪吃蛇控制台游戏

使用C语言和链表实现贪吃蛇游戏 一、引言 贪吃蛇游戏是一个经典的游戏&#xff0c;它的玩法简单而富有挑战性。在这个博客中&#xff0c;我将分享如何使用C语言和链表数据结构来自主实现贪吃蛇游戏。我会详细介绍游戏的设计思路、编码过程、遇到的问题及解决方案&#xff0c;…

将要上市的自动驾驶新书《自动驾驶系统开发》中摘录各章片段 1

以下摘录一些章节片段&#xff1a; 1. 概论 自动驾驶系统的认知中有一些模糊的地方&#xff0c;比如自动驾驶系统如何定义的问题&#xff0c;自动驾驶的研发为什么会有那么多的子模块&#xff0c;怎么才算自动驾驶落地等等。本章想先给读者一个概括介绍&#xff0c;了解自动驾…

Rust 生命周期浅谈

1. 简述 Rust 中的每一个引用都有其 生命周期&#xff08;lifetime&#xff09;&#xff0c;也就是引用保持有效的作用域。大部分时候生命周期是隐含并可以推断的&#xff0c;正如大部分时候类型也是可以推断的一样。类似于当因为有多种可能类型的时候必须注明类型&#xff0c;…

JAVA语言开发的智慧城管系统源码:技术架构Vue+后端框架Spring boot+数据库MySQL

通过综合应用计算机技术、网络技术、现代通信技术等多种信息技术&#xff0c;充分融合RS遥感技术、GPS全球定位技术、GIS地理信息系统&#xff0c;开始建设一个动态可视的、实时更新的、精细量化的城市管理系统。智慧城管将采用云平台架构方式进行建设&#xff0c;基于现有数字…

【idea-sprongboot项目】SSH连接云服务器进行远程开发

继上一篇博客【阿里云服务器】ubuntu 22.04.1安装docker以及部署java环境-CSDN博客 目录 五、远程开发方式 1&#xff09;SSH进行远程开发 步骤 配置文件同步 window电脑远程操控 正式通过window电脑远程操控 运行在linux服务器上的远程程序 调试在linux服务器上的远程程…

恶补《操作系统》5_2——王道学习笔记

5.2_1 I-O核心子系统 1、用户层软件 假脱机系统 2、设备独立性软件&#xff08;设备无关性软件&#xff09; IO调度、设备保护、设备分配与回收、缓冲区管理 3、设备驱动程序&#xff08;比如打印机驱动&#xff09; 4、中断处理程序 5、硬件 5.2_2 假脱机技术&#xff…

PHP医疗不良事件上报系统源码 AEMS开发工具vscode+ laravel8 医院安全(不良)事件报告系统源码 可提供演示

PHP医疗不良事件上报系统源码 AEMS开发工具vscode laravel8 医院安全&#xff08;不良&#xff09;事件报告系统源码 可提供演示 医院安全不良事件报告系统&#xff08;AEMS&#xff09;&#xff1b;分为外部报告系统和内部报告系统两类。内部报告系统主要以个人为报告单位&…
最新文章