javascript - 阅读多个内容的更多/更少按钮 - Javascript
问题描述
我正在尝试使用这个 javascript 解决方案在我的推荐中添加阅读更多/更少按钮。问题是它只适用于一个按钮,而不是希望的多个。如何使此代码适用于多个按钮而不是单个按钮?
function myFunction() {
var dots = document.getElementById("dots");
var moreText = document.getElementById("more");
var btnText = document.getElementById("myBtn");
if (dots.style.display === "none") {
dots.style.display = "inline";
btnText.innerHTML = "Read more";
moreText.style.display = "none";
} else {
dots.style.display = "none";
btnText.innerHTML = "Read less";
moreText.style.display = "inline";
}
}
#more {display: none;}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<h2>Read More Read Less Button</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus imperdiet, nulla et dictum interdum, nisi lorem egestas vitae scel<span id="dots">...</span><span id="more">erisque enim ligula venenatis dolor. Maecenas nisl est, ultrices nec congue eget, auctor vitae massa. Fusce luctus vestibulum augue ut aliquet. Nunc sagittis dictum nisi, sed ullamcorper ipsum dignissim ac. In at libero sed nunc venenatis imperdiet sed ornare turpis. Donec vitae dui eget tellus gravida venenatis. Integer fringilla congue eros non fermentum. Sed dapibus pulvinar nibh tempor porta.</span></p>
<button onclick="myFunction()" id="myBtn">Read more</button>
<h2>Read More Read Less Button</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus imperdiet, nulla et dictum interdum, nisi lorem egestas vitae scel<span id="dots">...</span><span id="more">erisque enim ligula venenatis dolor. Maecenas nisl est, ultrices nec congue eget, auctor vitae massa. Fusce luctus vestibulum augue ut aliquet. Nunc sagittis dictum nisi, sed ullamcorper ipsum dignissim ac. In at libero sed nunc venenatis imperdiet sed ornare turpis. Donec vitae dui eget tellus gravida venenatis. Integer fringilla congue eros non fermentum. Sed dapibus pulvinar nibh tempor porta.</span></p>
<button onclick="myFunction()" id="myBtn">Read more</button>
</body>
</html>
解决方案
正如评论中提到的,id's
必须是独一无二的,其中之一。没办法。如果您有多个,则只有 DOM 中的第一个可以工作。所以改用类。并学习如何event.target
在 JavaScript 中定位。它会让一切变得容易。
var dots = event.target.previousElementSibling.querySelector(".dots");
var moreText = event.target.previousElementSibling.querySelector(".more");
var btnText = event.target;
请在此处阅读如何使用事件定位元素
在捕获带有事件作为元素的单击按钮后,您只需要从中导航到其他元素。除其他外,您可以使用 previousSibling获取上一个p
,然后 使用querySelector在其中获取想要的类。
function myFunction(event) {
var dots = event.target.previousElementSibling.querySelector(".dots");
var moreText = event.target.previousElementSibling.querySelector(".more");
var btnText = event.target;
if (dots.style.display === "none") {
dots.style.display = "inline";
btnText.innerHTML = "Read more";
moreText.style.display = "none";
} else {
dots.style.display = "none";
btnText.innerHTML = "Read less";
moreText.style.display = "inline";
}
}
.more {
display: none;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<h2>Read More Read Less Button</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus imperdiet, nulla et dictum interdum, nisi lorem egestas vitae scel<span class="dots">...</span><span class="more">erisque enim ligula venenatis dolor. Maecenas nisl est, ultrices nec congue eget, auctor vitae massa. Fusce luctus vestibulum augue ut aliquet. Nunc sagittis dictum nisi, sed ullamcorper ipsum dignissim ac. In at libero sed nunc venenatis imperdiet sed ornare turpis. Donec vitae dui eget tellus gravida venenatis. Integer fringilla congue eros non fermentum. Sed dapibus pulvinar nibh tempor porta.</span></p>
<button onclick="myFunction(event)" class="myBtn">Read more</button>
<h2>Read More Read Less Button</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus imperdiet, nulla et dictum interdum, nisi lorem egestas vitae scel<span class="dots">...</span><span class="more">erisque enim ligula venenatis dolor. Maecenas nisl est, ultrices nec congue eget, auctor vitae massa. Fusce luctus vestibulum augue ut aliquet. Nunc sagittis dictum nisi, sed ullamcorper ipsum dignissim ac. In at libero sed nunc venenatis imperdiet sed ornare turpis. Donec vitae dui eget tellus gravida venenatis. Integer fringilla congue eros non fermentum. Sed dapibus pulvinar nibh tempor porta.</span></p>
<button onclick="myFunction(event)" class="myBtn">Read more</button>
</body>
</html>
推荐阅读
- express - 填充数组 refPath 嵌套对象
- android - 如何在android中清除毕加索缓存
- gitlab - Gitlab 的“页面”工作在内部是如何工作的?
- javascript - 如何使用 Mapbox API 中的 Jquery 从活动的 li > a 中获取值?
- ios - 在 Swift 中处理 base64String 作为响应
- java - 为什么基于数组的队列不能正常工作?
- json - 如何使用标头从服务器 Alamofire swift 获取数据
- eclipse - Eclipse AWS Lambda 错误:在您的项目根目录中找不到 Serverless.template
- android - 在 android 设备上启动 appium 时出错
- javascript - JavaScript 中奇怪且不可预测的舍入行为