使用JavaScript切换段落显示
Toggle paragraph display using JavaScript
有人能告诉我为什么下面的JavaScript代码返回一个未定义的错误,当我点击按钮第二次?
当第一次点击时,它将显示h3元素中的文本,以及按钮的内部。文本会改变。然而,当我再次单击它时,我得到了未定义的错误。
我查看DOM,看到类名在第一次单击后更改为"reveal",它确实更改了。我假设在第二次单击时,当类名更改为"reveal"时,条件语句将跳转到"else"部分,并将类更改回"hide"和按钮文本,以便再次隐藏h3文本。然而,我得到"未捕获的类型错误:无法读取未定义的属性'className'"。
<body>
<header>
<h1>Header</h1>
<div id="button-div">
<button id="button">Click to Reveal</button>
</div>
<h3 class="hide">Text</h3>
<h2>subtext</h2>
</header>
</body>
CSS: .hide {
display: none;
}
和JS:
var button = document.getElementById("button");
var textHide = document.getElementsByClassName("hide");
button.addEventListener("click", function() {
if (textHide[0].className === "hide") {
textHide[0].className = "reveal";
button.innertext = "Click to Hide";
} else {
textHide[0].className = "hide";
button.innertext = "Click to Reveal";
}
console.log("click");
});
您得到错误"Uncaught TypeError: Cannot read property 'className' of undefined",因为在第二次点击时没有类名为'hide'的元素。
var button = document.getElementById("button");
var textHide = document.getElementsByTagName("h3");
button.addEventListener("click", function() {
if (textHide[0].className == "hide") {
textHide[0].className = "reveal";
button.innertext = "Click to Hide";
} else {
textHide[0].className = "hide";
button.innertext = "Click to Reveal";
}
console.log("click");
});
演示:http://jsfiddle.net/5pq0hbye/
这是因为getElementsByClassName
以live方式工作。因此,当您将className
从hide
更改为none
时,对象textHide
也被更新,然后在您的页面中没有更多具有hide
CSS类的元素。
querySelectorAll
:
来避免这种行为var textHide = document.querySelectorAll(".hide");
问题是,当您隐藏元素时,您正在清空document.getElementsByClassName("hide")
,因为它是一个活动的NodeList -即每次类名更新时它都会更新。通过重置类名,您将删除hide
类。
var button = document.getElementById("button");
var textHide = document.getElementsByClassName("toHide");
button.addEventListener("click", function() {
if (textHide[0].classList.contains('hide')) {
textHide[0].classList.remove("hide");
button.innertext = "Click to Hide";
} else {
textHide[0].classList.add("hide");
button.innertext = "Click to Reveal";
}
console.log("click");
});
根据toHide hide
而不是hide
更新HTML中的类,这样您就有一个引用来获取元素并将其初始化为hidden。或者,您可以使用ID或不同的类名。
- 附加“;显示更多“;仅当满足设定的字符数时,链接到截断的段落
- 如何将JavaScript结果显示为段落
- JQuery:如何在每次单击时逐个显示段落标签数组
- jQuery:仅显示新的JSON数据,并使用自己的段落标签进行迭代
- 如何隐藏和显示 html 输入文本和段落
- 我该如何在旅途中添加一些段落,并将结果显示在带有段落标记的文档中
- 从文本框中获取文本并将其显示在段落中
- 将文本值与复选框值之和相乘,并将其显示在段落中
- 当单击按钮时,隐藏已显示页面加载的段落
- 如何在描述中显示空格和段落
- 截断段落的前100个字符并隐藏段落的其余内容,以显示/隐藏更多/更少链接的其余内容
- 如何在jQuery中显示基于两个不同选择选项的段落
- 在
段落中使用 getElementById.innerHTML 在 Javascript 中显示变量值
- 滑动切换 单击或悬停图像时显示段落
- 如何在段落标签中显示隐藏字段值
- 无法在网页上显示的 HTML 段落上叠加图像图标
- 如何使用 Jquery 在段落中以纯文本形式显示我的数据,该段落以 JSON 文本包装
- 仅在单击时显示段落的 HTML
- 添加和删除段落,简要显示文本
- 使用JavaScript切换段落显示