首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >HTML和CSS - DOM遍历

HTML和CSS - DOM遍历
EN

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

我有HTML:

代码语言:javascript
代码运行次数:0
运行
复制
<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
运行
复制
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-13 01:45:35

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

代码语言:javascript
代码运行次数:0
运行
复制
var pathShort = "GameIdea";
var anchor = document.getElementById(pathShort);
var anchorParent = anchor.parentNode;
var button = anchorParent.previousElementSibling;
button.classList.add("active");
代码语言:javascript
代码运行次数:0
运行
复制
<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-13 01:49:21

你可以使用...

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

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

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

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

票数 1
EN

Stack Overflow用户

发布于 2020-02-13 01:45:44

试试这个:

代码语言:javascript
代码运行次数:0
运行
复制
const pathShort = 'GameIdea';
const anchor = document.getElementById(pathShort);
const anchorParent = anchor.parentElement;
const button = anchorParent.previousElementSibling;
button.classList.add("active");
代码语言:javascript
代码运行次数:0
运行
复制
<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

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档