gpt4 book ai didi

javascript - JavaScript 中的 ParentNode 和 previousSibling

转载 作者:搜寻专家 更新时间:2023-11-01 05:12:12 26 4
gpt4 key购买 nike

我正在看一本学习 JavaScript 的书,它似乎有编码错误,因为我正在看的东西似乎不起作用。这是我拥有的:

HTML:

<!DOCTYPE html>
<html>
<head>
<title>Examples of moving around in the DOM using native JavaScript methods</title>
<meta charset="UTF-8">

<!-- CSS Stylesheet -->
<link rel="stylesheet" href="css/show.css">
</head>
<body>

<!-- Let's get the parent element for the target node and add a class of "active" to it -->
<ul id="nav">
<li><a href="/" id="home">Home</a></li>
<li><a href="/about" id="about">About Us</a></li>
<li><a href="/contact" id="contact">Contact Us</a></li>
</ul>
<input type="button" onclick="targetClass()" value="Target the Class"/>
<input type="button" onclick="prevNextSibling()" value="Target Next and Previous Sibling"/>

<script src="js/js.js"></script>
</body>
</html>

JavaScript:

// This block of JavaScript obtains the parent element
// target the "about" link and apply a class to its parent list item
function targetClass()
{
document.getElementById("about").parentNode.setAttribute("class", "active");
}
// This block of code adds a Class to Previous and Next Sibling Nodes
function prevNextSibling()
{
// get "about" parent, then its previous sibling and apply a class
document.getElementById("about").parentNode.previousSibling.setAttribute("class", "previous");
// get "about" parent, then its next sibling and apply a class
document.getElementById("about").parentNode.nextSibling.setAttribute("class", "next");
}

根据这本书,我应该得到的生成的 HTML 的输出是:

<ul id="nav">
<li class=" previous" ><a href="/" id="home">Home</a></li>
<li class=" active" ><a href="/about" id="about">About Us</a></li>
<li class=" next" ><a href="/contact" id="contact">Contact Us</a></li>
</ul>

但是当我点击我的文本框时没有任何反应。

我该如何解决这个问题?

最佳答案

一些浏览器在 DOM 元素之间插入空格
阅读以下链接中的注释部分
https://developer.mozilla.org/en-US/docs/Web/API/Node.nextSibling

解决方案是使用 prevElementSibling 和 nextElementSibling .这将选择下一个相同类型的兄弟

这有效:http://jsfiddle.net/E2k6t/1/

function targetClass()
{
document.getElementById("about").parentNode.setAttribute("class", "active");
}
function prevNextSibling()
{
document.getElementById("about").parentNode.previousElementSibling.setAttribute("class", "previous");
document.getElementById("about").parentNode.nextElementSibling.setAttribute("class", "next");
}

注意事项

不建议在进行实际开发时在 HTML 代码中使用内联 javascript (onclick="targetClass()") - 讨论 herehere .使用 Event Listeners

关于javascript - JavaScript 中的 ParentNode 和 previousSibling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20768925/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com