如何访问 DOM 中的元素

2023-11-20

介绍

In 了解 DOM 树和节点中,我们回顾了 DOM 如何构建为称为节点的对象树,这些节点可以是文本、注释或元素。通常当我们访问 DOM 中的内容时,会通过 HTML 元素节点。

为了能够自信地访问 DOM 中的元素,最好具备 CSS 选择器、语法和术语的应用知识以及对 HTML 元素的理解。在本教程中,您将学习访问 DOM 中元素的多种方法:通过 ID、类、标签和查询选择器。

Overview

下面是我们将在本教程中介绍的五种方法的表格概述。

Gets Selector Syntax Method
ID #demo getElementById()
Class .demo getElementsByClassName()
Tag demo getElementsByTagName()
Selector (single) querySelector()
Selector (all) querySelectorAll()

在学习 DOM 时,自己使用示例会很有帮助,以确保您理解并记住所学的信息。

创建一个新文件,access.html,在您自己的项目中完成本文中的示例。如果您不确定如何在本地使用 JavaScript 和 HTML,请查看我们的如何将 JavaScript 添加到 HTML教程。

访问.html
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>Accessing Elements in the DOM</title>

  <style>
    html { font-family: sans-serif; color: #333; }
    body { max-width: 500px; margin: 0 auto; padding: 0 15px; }
    div, article { padding: 10px; margin: 5px; border: 1px solid #dedede; }
  </style>

</head>

<body>

  <h1>Accessing Elements in the DOM</h1>

  <h2>ID (#demo)</h2>
  <div id="demo">Access me by ID</div>

  <h2>Class (.demo)</h2>
  <div class="demo">Access me by class (1)</div>
  <div class="demo">Access me by class (2)</div>

  <h2>Tag (article)</h2>
  <article>Access me by tag (1)</article>
  <article>Access me by tag (2)</article>

  <h2>Query Selector</h2>
  <div id="demo-query">Access me by query</div>

  <h2>Query Selector All</h2>
  <div class="demo-query-all">Access me by query all (1)</div>
  <div class="demo-query-all">Access me by query all (2)</div>

</body>

</html>

在此 HTML 文件中,我们有许多元素,我们将使用不同的方式访问这些元素document方法。当我们在浏览器中渲染该文件时,它将类似于以下内容:

Browser rendering of access.html page

我们将使用我们在Overview访问文件中的可用元素。

通过 ID 访问元素

访问 DOM 中单个元素的最简单方法是通过其唯一的ID。您可以通过 ID 获取元素getElementById()的方法document object.

document.getElementById();

为了通过 ID 访问,HTML 元素必须有一个id属性。你有一个divID 为的元素demo您可以使用:

<div id="demo">Access me by ID</div>

In the Console,获取元素并将其分配给demoId多变的。

  1. 常量解冻=document.getElementById('demo');

Logging demoId控制台将返回整个 HTML 元素。

  1. 控制台日志(demoId);
Output
<div id="demo">Access me by ID</div>

您可以通过更改来确保您正在访问正确的元素border财产给purple.

  1. demoId.style.border= '1px纯紫色';

完成此操作后,您的实时页面将如下所示:

Browser rendering of ID element styling

通过ID访问元素是在DOM中快速获取元素的有效方法。但是,它也有缺点:ID 对于页面必须始终是唯一的,因此您一次只能访问单个元素getElementById()方法。如果您想向整个页面的许多元素添加功能,您的代码很快就会变得重复。

按类访问元素

The class属性用于访问 DOM 中的一个或多个特定元素。您可以使用给定类名获取所有元素getElementsByClassName() method.

document.getElementsByClassName();

现在我们想要访问多个元素,在我们的示例中,我们有两个带有 a 的元素demo class.

<div class="demo">Access me by class (1)</div>
<div class="demo">Access me by class (2)</div>

访问这些元素Console并将它们放入一个名为的变量中demoClass.

  1. 常量演示类=document.getElementsByClassName('demo');

此时,您可能会很想按照与 ID 示例相同的方式修改元素。但是,如果您尝试运行以下代码并更改border将类演示元素的属性设置为橙色,您将收到错误。

  1. demoClass.style.border= '1px 纯橙色';
Output
Uncaught TypeError: Cannot set property 'border' of undefined

这不起作用的原因是因为您不只是获取一个元素,而是拥有一个类似数组的元素对象。

  1. 控制台日志(演示类);
Output
(2) [div.demo, div.demo]

JavaScript 数组必须使用索引号进行访问。您可以使用索引更改此数组的第一个元素0.

  1. 演示类[0].style.border= '1px 纯橙色';

通常,当按类访问元素时,我们希望对文档中具有该特定类的所有元素应用更改,而不仅仅是一个。您可以通过创建一个来做到这一点for循环,并循环遍历数组中的每个项目。

  1. for (i = 0; i <demoClass.length; i++) {
  2. 演示类[i].style.border= '1px 纯橙色';
  3. }

当您运行此代码时,您的实时页面将呈现如下:

Browser rendering of class element styling

您现在已经选择了页面上具有demo类,并改变了border财产给orange.

通过标签访问元素

访问页面上多个元素的一种不太具体的方法是通过其 HTML 标签名称。您可以通过标签访问元素getElementsByTagName() method.

document.getElementsByTagName();

对于我们的标签示例,我们使用article元素。

<article>Access me by tag (1)</article>
<article>Access me by tag (2)</article>

就像通过元素的类访问元素一样,getElementsByTagName()将返回一个类似数组的元素对象,您可以使用以下命令修改文档中的每个标签for loop.

  1. 常量演示标签=document.getElementsByTagName('文章');
  2. for (i = 0; i <demoTag.length; i++) {
  3. 演示标签[i].style.border= '1px 纯蓝色';
  4. }

运行代码后,实时页面将被修改如下:

Browser rendering of tag element styling

循环改变了border所有人的财产article元素到blue.

查询选择器

如果您有任何相关经验jQueryAPI,您可能熟悉 jQuery 使用 CSS 选择器访问 DOM 的方法。

$('#demo'); // returns the demo ID element in jQuery

您可以使用纯 JavaScript 执行相同的操作querySelector() and querySelectorAll()方法。

document.querySelector();
document.querySelectorAll();

要访问单个元素,您可以使用querySelector()方法。在我们的 HTML 文件中,我们有一个demo-query element

<div id="demo-query">Access me by query</div>

选择器id属性是哈希符号(#)。您可以使用以下方式分配元素demo-queryid 到demoQuery多变的。

  1. const demoQuery=文档.querySelector('#demo-query');

对于具有多个元素(例如类或标签)的选择器,querySelector()将返回与查询匹配的第一个元素。您可以使用querySelectorAll()方法来收集与特定查询匹配的所有元素。

在示例文件中,有两个元素demo-query-all类适用于他们。

<div class="demo-query-all">Access me by query all (1)</div>
<div class="demo-query-all">Access me by query all (2)</div>

选择器class属性是句点或句号 (.),这样你就可以通过以下方式访问该类.demo-query-all.

  1. const demoQueryAll=文档.querySelectorAll('.demo-query-all');

使用forEach()方法,你可以应用颜色green to the border所有匹配元素的属性。

  1. demoQueryAll.forEach(query => {
  2. 查询.样式.边框= '1px 纯绿色';
  3. });

Browser rendering of querySelector() styling

With querySelector(), 逗号分隔值用作 OR 运算符。例如,querySelector('div, article')将匹配div or article,以文档中最先出现的为准。和querySelectorAll(), 逗号分隔值用作 AND 运算符,并且querySelectorAll('div, article')将匹配所有div and article文档中的值。

使用查询选择器方法非常强大,因为您可以像在 CSS 文件中一样访问 DOM 中的任何元素或元素组。有关选择器的完整列表,请查看CSS 选择器在 Mozilla 开发者网络上。

完整的 JavaScript 代码

以下是您上面所做工作的完整脚本。您可以使用它来访问示例页面上的所有元素。将文件另存为access.js并在关闭之前将其加载到 HTML 文件中body tag.

访问.js
// Assign all elements
const demoId = document.getElementById('demo');
const demoClass = document.getElementsByClassName('demo');
const demoTag = document.getElementsByTagName('article');
const demoQuery = document.querySelector('#demo-query');
const demoQueryAll = document.querySelectorAll('.demo-query-all');

// Change border of ID demo to purple
demoId.style.border = '1px solid purple';

// Change border of class demo to orange
for (i = 0; i < demoClass.length; i++) {
  demoClass[i].style.border = '1px solid orange';
}

// Change border of tag demo to blue
for (i = 0; i < demoTag.length; i++) {
  demoTag[i].style.border = '1px solid blue';
}

// Change border of ID demo-query to red
demoQuery.style.border = '1px solid red';

// Change border of class query-all to green
demoQueryAll.forEach(query => {
  query.style.border = '1px solid green';
});

您的最终 HTML 文件将如下所示:

访问.html
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>Accessing Elements in the DOM</title>

  <style>
    html { font-family: sans-serif; color: #333; }
    body { max-width: 500px; margin: 0 auto; padding: 0 15px; }
    div, article { padding: 10px; margin: 5px; border: 1px solid #dedede; }
  </style>

</head>

<body>

  <h1>Accessing Elements in the DOM</h1>

  <h2>ID (#demo)</h2>
  <div id="demo">Access me by ID</div>

  <h2>Class (.demo)</h2>
  <div class="demo">Access me by class (1)</div>
  <div class="demo">Access me by class (2)</div>

  <h2>Tag (article)</h2>
  <article>Access me by tag (1)</article>
  <article>Access me by tag (2)</article>

  <h2>Query Selector</h2>
  <div id="demo-query">Access me by query</div>

  <h2>Query Selector All</h2>
  <div class="demo-query-all">Access me by query all (1)</div>
  <div class="demo-query-all">Access me by query all (2)</div>

  <script src="access.js"></script>

</body>

</html>

您可以继续处理这些模板文件,通过访问 HTML 元素进行其他更改。

结论

在本教程中,我们介绍了 5 种访问 DOM 中 HTML 元素的方法 - 按 ID、按类、按 HTML 标签名称和按选择器。您用于获取一个元素或一组元素的方法将取决于浏览器支持以及您将操作的元素数量。现在,您应该可以放心地使用 JavaScript 通过 DOM 访问文档中的任何 HTML 元素。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何访问 DOM 中的元素 的相关文章

  • onclick 调用 hide-div 函数不起作用

    我一直在与这段简单的代码作斗争 我正在尝试使用
  • 如何在chartjs中绘制多个时间序列,其中每个时间序列都有不同的时间

    例如 我有两个时间序列 s1 2017 01 06 18 39 30 100 2017 01 07 18 39 28 101 and s2 2017 01 07 18 00 00 90 2017 01 08 18 00 00 105 我想在
  • 我是否需要关心异步 Javascript 的竞争条件?

    假设我加载了一些我知道在将来某个时候会调用的 Flash 影片window flashReady并将设置window flashReadyTriggered true 现在我有一个代码块 我想在闪存准备好时执行它 我希望它立即执行 如果wi
  • ExtJS 4 用于选择所选值的组合框事件

    由于某种原因 我需要知道用户何时从组合框中选择了值 即使它已经被选择 仅当用户选择未选择的项目时 选择 事件才起作用 我在组合框或选择器的文档中没有看到任何类似 itemclick 的事件 有任何想法吗 ComboBox uses 绑定列表
  • 我无法在我的反应本机上使用加载的应用程序。它不会正常工作

    我不断收到此错误 错误截图 https i stack imgur com 88KPa png 这是我用来导入自定义谷歌字体的代码 import React useState from react import Home from scre
  • 将字符串数组转换为对象 Id 数组

    我有一个字符串数组 let stringObjectIdArray fssdlfsd343 43434234242 342424242 我想使用 mongoose 类型将字符串数组更改为对象 Id 数组 但它不起作用 它仅适用于字符串而不是
  • HTML:您可以隐藏/忽略浏览器查找中的文本元素 (CTRL+F)

    我有一个具有相当复杂的 UI 的 Web 应用程序 并且屏幕的一部分保留用于内容 如果可能的话 我想这样做 以便当用户使用浏览器的内置文本搜索 CTRL F 时 UI 中的任何文本都将被忽略 并且仅搜索实际内容 这可行吗 CSS 和 Jav
  • 无法读取未定义错误的属性“匹配”

    我试图在 React JS 前端显示一些文本来代替个人资料图像 当它不可用时 基本上 我将当前客户名称传递给一个函数 该函数提取名称中所有单词的第一个字符 我能够仅显示名称 但是当我执行函数调用时 出现 无法读取未定义的属性 匹配 错误 并
  • 执行oauth时如何创建弹出窗口?

    我想通过使用弹出窗口来完成 Lifestream 和其他网站使用 oauth 身份验证所做的事情 他们打开一个弹出窗口 不知何故没有被弹出窗口拦截器阻止 并将他们的网站变灰 然后 在允许 oauth 访问时 它会说重定向回原始站点并终止弹出
  • 基于 json 文件动态显示选择、复选框、日期选择器等

    对我之前的问题的补充 我根据 json 文件动态显示输入字段 现在我想根据它们的组显示选择项 复选框和日期选择器 我如何解决这个问题 我需要将这些元素推入computeJSON 但写入例如选择options item selection不管
  • 检测 SVGAnimatedString 的类名

    我在构建 SVG 地图时遇到问题 触发的功能 g 上的 onmouseover 不起作用 我当时用的 window onmouseover function e console log e target className 查看类名是否有问
  • webpack 加载器并包含

    我是 webpack 的新手 我正在尝试了解加载器及其属性 例如测试 加载器 包含等 这是我在 google 中找到的 webpack config js 的示例片段 module loaders test js loader babel
  • Javascript:更改浏览器后退按钮的功能

    有没有办法让用户的浏览器上的后退按钮调用 JavaScript 函数而不是返回页面 您无法覆盖这样的行为 如果用户通过链接访问您的页面 则单击 后退 将使他们再次离开该页面 但是 您可以使页面上的 JavaScript 操作将条目添加到历史
  • ES6 生成器——它们真的是 async/await 的替代品吗?

    评论区的帖子之一this http blogs msdn com b typescript archive 2014 10 22 typescript and the road to 2 0 aspx打字稿博客文章说 如果我必须等到 2 0
  • 无法使用 jQuery 添加两个小数

    我试图将两个小数值相加 但返回的总和是纯整数 怎么了 我找不到它 欢迎任何帮助 jQuery delivery method ship select change function var cost jQuery this val jQue
  • 根据复选框显示/隐藏输入字段[重复]

    这个问题在这里已经有答案了 如果单击该复选框 它将显示一个输入字段 到目前为止它正在工作 但如果未选中该复选框 它应该隐藏它 我该怎么做 div class checkbox div
  • 如何使用javascript通过类名更改html元素的值

    这是我用来更改 html 元素值的代码 a class classname href Vtech com This text to be chnage a 如何在页面加载瞬间更改此文本 看来你需要添加DOMContentLoaded或者把你
  • 查找 JavaScript 中函数参数的数量[重复]

    这个问题在这里已经有答案了 可能的重复 获取函数的元数 https stackoverflow com questions 4848149 get a functions arity 假设我有 function a x function b
  • 图像未显示在从 HTML 创建的 PDF 上

    我想动态创建 PDF 这意味着我将从 Google Drive 获取文件 然后将它们放入 HTML 代码中 并尝试从中创建 PDF 一切工作正常 除了图像没有显示 我现在正在做的是 从 HTML 字符串创建 HtmlOutput 获取该 H
  • 如何始终将焦点保持在画布上?

    我一直在这个论坛寻找解决方案 但尚未找到 无论我在页面上的哪个位置单击 我都需要始终将焦点放在画布元素上 我有几个按钮 在每个 onclick 事件中我写 document getElementById canvas focus 这确实有效

随机推荐

  • 如何使用 Mysqldump 备份和恢复 MySQL 数据库

    本教程介绍如何使用 mysqldump 实用程序从命令行备份和恢复 MySQL 或 MariaDB 数据库 mysqldump 实用程序创建的备份文件基本上是一组可用于重新创建原始数据库的 SQL 语句 mysqldump 命令还可以生成
  • 如何在 Ubuntu 20.04 上安装 Spotify

    Spotify是一种数字音乐流媒体服务 可让您即时访问数百万首歌曲 从经典老歌到最新热门歌曲 本指南展示了在 Ubuntu 20 04 上安装 Spotify 的两种方法 Spotify 可以通过 Snapcraft 商店作为 snap 包
  • 如何在 Debian 9 上设置或更改时区

    使用正确的时区对于许多与系统相关的任务和流程都很重要 例如 cron 守护进程使用系统的时区来执行 cron 作业 并且日志文件中的时间戳基于同一系统的时区 系统的时区是在安装过程中设置的 但以后可以轻松更改 本教程展示如何在 Debian
  • 如何在 Ubuntu 20.04 上安装 VMware Workstation Player

    VMwareWorkstation Player 是一款桌面虚拟化软件 允许您在一台计算机上运行多个独立的操作系统 借助 VMware Player 您可以创建并运行自己的虚拟机 并评估由许多软件供应商提供的作为虚拟设备分发的软件VMwar
  • 如何在 CentOS 8 上设置 Apache 虚拟主机

    Apache 虚拟主机允许您在一台计算机上运行多个网站 使用虚拟主机 您可以指定站点文档根 包含网站文件的目录 为每个站点创建单独的安全策略 使用不同的 SSL 证书等等 本文介绍如何在 CentOS 8 服务器上设置 Apache 虚拟主
  • 如何在 Ubuntu 18.04 上安装 VLC 媒体播放器

    VLC 是最流行的开源多媒体播放器之一 它是跨平台的 几乎可以播放所有多媒体文件以及 DVD 音频 CD 和不同的流媒体协议 本教程介绍如何在 Ubuntu 18 04 上安装 VLC 媒体播放器 相同的说明适用于 Ubuntu 16 04
  • 如何在 CentOS 8 上安装和配置 Redis

    Redis 是一个开源内存键值数据存储 它可以用作数据库 缓存和消息代理 并支持各种数据结构 例如字符串 哈希 列表 集合等 Redis 通过 Redis Sentinel 提供高可用性 并通过 Redis Cluster 跨多个 Redi
  • 如何在Linux中删除组(groupdel命令)

    在 Linux 中 组用于组织和管理用户帐户 组的主要目的是定义一组权限 例如读 写或执行允许对于可以在组内的用户之间共享的给定资源 可以使用以下命令创建一个新组groupadd命令 如果不再需要某个组并且可以从系统中删除 本文介绍了如何在
  • Python 加入列表

    Python join list 的意思是将一串字符串与指定的分隔符连接起来形成一个字符串 有时 当您必须将列表转换为字符串时 它很有用 例如 将字母列表转换为逗号分隔的字符串以保存在文件中 Python 加入列表 我们可以用蟒蛇字符串jo
  • Java Hello World 程序

    每当我们开始学习一门编程语言时 第一个程序总是打印Hello World 在上一篇文章中 我们了解到如何在 Windows 10 上安装 Java 现在我们准备编写并运行我们的第一个 Hello World Java 程序 Java Hel
  • 从 Python 调用 C 函数

    我们可以使用 Python 程序调用 C 函数ctypes module 从 Python 调用 C 函数 它涉及以下步骤 创建具有所需函数的 C 文件 c 扩展名 使用 C 编译器创建共享库文件 so 扩展名 在 Python 程序中 从
  • Java中的迭代器设计模式

    迭代器设计模式中的行为模式之一 迭代器模式用于提供遍历一组对象的标准方法 迭代器模式广泛应用于Java集合框架 Iterator 接口提供了遍历集合的方法 迭代器设计模式 According to GoF iterator design p
  • 如何使用 HAProxy 在 Ubuntu VPS 上设置 HTTP 负载平衡

    关于HAProxy HAProxy 高可用性代理 是一个开源负载均衡器 可以对任何 TCP 服务进行负载均衡 它特别适合 HTTP 负载平衡 因为它支持会话持久性和第 7 层处理 与数字海洋专用网络 HAProxy 可以配置为前端 通过专用
  • SSH 要点:使用 SSH 服务器、客户端和密钥

    介绍 SSH 是一种安全协议 用作远程连接 Linux 服务器的主要方式 它通过生成远程 shell 来提供基于文本的界面 连接后 您在本地终端中输入的所有命令都会发送到远程服务器并在那里执行 在这份备忘单式的指南中 我们将介绍一些使用 S
  • 安卓谷歌智能锁

    在本教程中 我们将讨论智能锁功能并在 Android 应用程序中实现它 谷歌智能锁 Smart Lock 用于通过一劳永逸地保存凭据来自动登录您的应用程序 这意味着 如果您在一段时间后重新安装应用程序 您可以使用之前保存的凭据自动登录 前提
  • Android 运行时权限示例

    欢迎来到 Android 运行时权限示例 随着介绍安卓6 0棉花糖 Google 改变了应用程序处理权限的方式 在本教程中 我们将研究引入的新 Android 运行时权限以及如何处理它们 如果处理不当 可能会导致应用程序崩溃 什么是 And
  • 如何创建 Django 模型

    介绍 在之前的教程中 如何创建 Django 应用程序并将其连接到数据库 我们介绍了如何创建 MySQL 数据库 如何创建和启动 Django 应用程序以及如何将其连接到 MySQL 数据库 在本教程中 我们将创建 Djangomodels
  • 如何在 JavaScript 中修改 CSS 类

    介绍 在本教程中 您将学习如何使用 JavaScript 修改 CSS 类classListDOM 操作项目的对象 这classListobject 允许您调整分配给 HTML 元素的 CSS 类 先决条件 JavaScript 的一般知识
  • 如何在 Python 中将 NumPy 数组转换为列表

    介绍 With NumPy np array对象可以转换为列表tolist 功能 这tolist 函数不接受任何参数 如果数组是一维的 则返回包含数组元素的列表 对于多维数组 返回嵌套列表 先决条件 为了完成本教程 您将需要 熟悉 Pyth
  • 如何访问 DOM 中的元素

    介绍 In 了解 DOM 树和节点中 我们回顾了 DOM 如何构建为称为节点的对象树 这些节点可以是文本 注释或元素 通常当我们访问 DOM 中的内容时 会通过 HTML 元素节点 为了能够自信地访问 DOM 中的元素 最好具备 CSS 选