Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >HTML和CSS - DOM遍历

HTML和CSS - DOM遍历
EN

Stack Overflow用户
提问于 2020-02-12 17:34:28
回答 3查看 84关注 0票数 1

我有HTML:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="dropdown">
  <button class="dropbtn">Game Design</button>
  <div class="dropdown-content">
    <a id="GameIdea" href="GameIdea.html">Link 1</a>
    <a id="GameMechanics" href="GameMechanics.html">Link 2</a>
    <a id="GameCharacters" href="GameCharacters.html">Link 3</a>
    <a id="Inspiration" href="Inspiration.html">Link 3</a>
  </div>
</div>

和JavaScript:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var anchor = document.getElementById(pathShort); //e.g. pathShort == GameIdea
var anchorParent = anchor.parentNode;
var button = anchorParent.previousSibling;
button.classList.add("active");

问题是-我不想要锚元素:document.getElementById(pathShort);

我想要按钮元素,因此正如您所看到的,我使用anchor.parentNode;来获取锚点所在的div,然后使用anchorParent.previousSibling;来获取div旁边的元素,在此之前而不是之后。

在我看来,这是可行的,但在控制台中,我得到了错误Cannot read property 'add' of undefined,因此变量button必须是有效的nullempty,这意味着我在'add‘调用之前遍历DOM的方法没有起作用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-12 17:45:35

previousSibling方法返回的是一个空的文本节点(只包含空格),该节点不是元素,也没有classList属性。无论前一个节点是不是元素,previousSibling都会返回它。您可以将其更改为previousElementSibling以获取按钮元素,因为它只返回前一个元素,而忽略其他类型的节点。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var pathShort = "GameIdea";
var anchor = document.getElementById(pathShort);
var anchorParent = anchor.parentNode;
var button = anchorParent.previousElementSibling;
button.classList.add("active");
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="dropdown">
  <button class="dropbtn">Game Design</button>
  <div class="dropdown-content">
    <a id="GameIdea" href="GameIdea.html">Link 1</a>
    <a id="GameMechanics" href="GameMechanics.html">Link 2</a>
    <a id="GameCharacters" href="GameCharacters.html">Link 3</a>
    <a id="Inspiration" href="Inspiration.html">Link 3</a>
  </div>
</div>

票数 5
EN

Stack Overflow用户

发布于 2020-02-12 17:49:21

你可以使用...

var button = document.querySelector(".dropbtn")

这将获得类为dropbtn的第一个元素(本例中的button元素)。

如果您试图在button元素中添加一个类。我推荐你;

button.setAttribute("class", "dropbtn ANY-OTHER-CLASS")

票数 1
EN

Stack Overflow用户

发布于 2020-02-12 17:45:44

试试这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const pathShort = 'GameIdea';
const anchor = document.getElementById(pathShort);
const anchorParent = anchor.parentElement;
const button = anchorParent.previousElementSibling;
button.classList.add("active");
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="dropdown">
  <button class="dropbtn">Game Design</button>
  <div class="dropdown-content">
    <a id="GameIdea" href="GameIdea.html">Link 1</a>
    <a id="GameMechanics" href="GameMechanics.html">Link 2</a>
    <a id="GameCharacters" href="GameCharacters.html">Link 3</a>
    <a id="Inspiration" href="Inspiration.html">Link 3</a>
  </div>
</div>

当你访问像parentNodepreviousSibling这样的HTML DOM节点的属性时,你也会得到像文本节点这样的非HTML节点,在你的代码中,每一个新行都会创建一个空的文本节点,因此你得到的是它而不是所需的元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60194087

复制
相关文章
JavaScript HTML DOM - 改变CSS
HTML DOM 允许 JavaScript 改变 HTML 元素的样式。 ---- 改变 HTML 样式 如需改变 HTML 元素的样式,请使用这个语法: document.getElementById(id).style.property=新样式 下面的例子会改变 <p> 元素的样式: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>菜鸟教程(runoob.com)</title> </head> <body> <p id="p
陈不成i
2021/07/20
1.2K0
如何遍历DOM
最近开源了一个 Vue 组件,还不够完善,欢迎大家来一起完善它,也希望大家能给个 star 支持一下,谢谢各位了。
前端小智@大迁世界
2021/01/14
9K0
HTML和CSS
Opera:以前是presto内核,Opera现已改用Google Chrome的Blink内核
李才哥
2019/07/10
5.4K0
HTML DOM
DOM 文档对象模型。 节点 元素 即 标签 Element 1 文本 <a>文本</a> Text 3 属性 <a href=""></a> Attr 2 注释节点 Comment 8 文档节点 Document 9 文档类型节点 DocumentType 10 <!DOCTYPE html> 文档片段节点 DocumentFragment 11 Javascript obj.nodeName obj.nodeValue obj.attributes[0].nodeName
康怀帅
2018/02/28
6570
描述 HTML、CSS、DOM、JavaScript分别表示的含义
学会 HTML 对写博客非常有帮助,比如这篇作业就是使用 markdown 编写的,在markdown中可以内嵌HTML标签,来让自己的文章更好看。例如下面我就使用了 <font>标签来处理了部分文字。
繁依Fanyi
2023/05/07
9910
描述 HTML、CSS、DOM、JavaScript分别表示的含义
HTML DOM(一):认识DOM
该文介绍了DOM的基本概念,包括DOM的定义、组成部分、级别和节点等,并举例说明了DOM在HTML、XML和CSS等文档中的应用。
高爽
2017/12/28
1.6K0
HTML DOM(一):认识DOM
html和css进阶
5.0之前没有placeholder新增功能,之前是value(提示的文字需要用户删除,而且字的颜色也没有变暗)实现的
小闫同学啊
2019/07/18
3.5K0
HTML DOM - 修改 HTML 内容
通过 HTML DOM,JavaScript 能够访问 HTML 文档中的每个元素。
陈不成i
2021/07/21
7.1K0
JavaScript HTML DOM
当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。
陈不成i
2021/07/19
7290
HTML DOM 导航
getElementsByTagName() 方法返回节点列表。节点列表是一个节点数组。
陈不成i
2021/07/21
6750
DOM Core 与 HTML-DOM
DOM(文档对象模型)是由W3C制定的一套访问和操作XML(eXtensible Markup Language)文档的标准,即API。比如DOM告诉JavaScript引擎如何在浏览器窗口中显示和操作XML创建的标记(Tag)。
Chor
2019/11/07
1.9K0
HTML DOM - 事件
当事件发生时,可以执行 JavaScript,比如当用户点击一个 HTML 元素时。
陈不成i
2021/07/21
2K0
AngularJS HTML DOM
ng-disabled 指令直接绑定应用程序数据到 HTML 的 disabled 属性。
陈不成i
2021/07/23
8160
HTML DOM 方法
可通过 JavaScript (以及其他编程语言)对 HTML DOM 进行访问。
陈不成i
2021/07/21
3450
HTML DOM 简介
编者注:DOM 是 Document Object Model(文档对象模型)的缩写。
陈不成i
2021/07/21
4500
HTML DOM 学习
DOM简单来说就是文档对象模型,当一个HTML页面被加载就会创建HTML页面的DOM
Mirror王宇阳
2020/11/12
9720
HTML DOM - 元素
如需向 HTML DOM 添加新元素,您首先必须创建该元素,然后把它追加到已有的元素上。
陈不成i
2021/07/21
2.2K0
HTML DOM - 修改
如需向 HTML DOM 添加新元素,您首先必须创建该元素(元素节点),然后把它追加到已有的元素上。
陈不成i
2021/07/21
1.2K0
JavaScript HTML DOM - 改变 HTML
今天的日期是: Mon Jul 19 2021 15:52:44 GMT+0800 (中国标准时间)
陈不成i
2021/07/20
4.3K0
HTML DOM 节点
我们常用父(parent)、子(child)和同胞(sibling)等术语来描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。
陈不成i
2021/07/21
9860

相似问题

遍历html dom树及其css样式

12

CSS遍历优于JavaScript DOM遍历?

16

Javascript DOM遍历和CSS选择器

10

简单的HTML DOM遍历html

21

PHP DOM遍历HTML节点和子节点

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文