javascript - 如何从单击的按钮中显示文本,然后在单击新按钮时隐藏以前的文本
问题描述
我正在努力做到这一点,以便当我单击一个类别时,会出现该类别的文本。然后,当单击新类别时,先前的类别文本将被删除,新类别的文本将取而代之。现在,无论我点击什么按钮,所有项目都会出现。
索引.html
<div class='container'>
<button class="button">Fit guide</button>
<button class="button">Care</button>
<button class="button">Materials</button>
<div class="single-entry">
<p class="fit">lkasdnf;aksdjf;askdjflkjsdhflkajsdhflaksjdhfaksjdhflkasjdhfasjdbflaksjdhflkasdjhfkajsdbas</p>
</div>
<div class="single-entry">
<p>lkasdnf;aksdjf;askdjflkjsdhflkajsdhflaksjdhfaksjdhflkasjdhfasjdbflaksjdhflkasdjhfkajsdbas</p>
</div>
<div class="single-entry">
<p>lkasdnf;aksdjf;askdjflkjsdhflkajsdhflaksjdhfaksjdhflkasjdhfasjdbflaksjdhflkasdjhfkajsdbas</p>
</div>
</div>
index.js
const displayEntryButton = document.querySelectorAll('.button');
const test = document.querySelector('.fit');
for (var j = 0; j < displayEntryButton.length; j++) {
displayEntryButton[j].addEventListener('click', function () {
const allEntries = document.querySelectorAll('.single-entry');
for (let index = 0; index < allEntries.length; index++) {
if(allEntries[index].style.display === 'none') {
allEntries[index].style.display = 'block'
} else {
allEntries[index].style.display = 'none';
}
}
})
}
解决方案
我已经稍微调整了您的代码以使事情正常进行。
我的调整主要是为每个条目 div 添加一个id ,并为每个按钮添加一个匹配的数据值。
然后在单击按钮时使用id和data-value进行比较。如果匹配,则显示相应的内容。
试试下面的片段。- 注释包含在代码中。
const displayButtons = document.querySelectorAll('.button');
const entryDivs = document.querySelectorAll('.single-entry');
//start for loop to iterate over each button
for (j = 0; j < displayButtons.length; j++) {
//btnValue is declared to capture the data-value attribute
const btnValue = displayButtons[j].getAttribute('data-value');
displayButtons[j].addEventListener('click', function() {
//nested loop to iterate over each entry div
for (i = 0; i < entryDivs.length; i++) {
//entryId is declared to capture the div id
const entryId = entryDivs[i].id;
//if btnValue matches entryId
if (btnValue === entryId) {
//show the corresponding content
entryDivs[i].style.display = "block"
} else {
//otherwise show nothing
entryDivs[i].style.display = "none"
}
}
})
}
/*set all entries to display none by default*/
.single-entry {
display: none;
}
<div class='container'>
<!-- Here we are setting a data-value on each button -->
<!-- The data-value must match the id for each corresponding div -->
<button class="button" data-value="fit">Fit guide</button>
<button class="button" data-value="care">Care</button>
<button class="button" data-value="materials">Materials</button>
<!-- Each div below has an id to match each buttons data-value -->
<div class="single-entry" id="fit">
<p>FIT ENTRY</p>
</div>
<div class="single-entry" id="care">
<p>CARE ENTRY</p>
</div>
<div class="single-entry" id="materials">
<p>MATERIALS ENTRY</p>
</div>
</div>
推荐阅读
- django - 多个表中的 Django 查询集
- python - 如何使用一些拆分功能在字典中提取元组数据存储
- python - 如何在 Windows 10 中使用 msiexec 安装两个 python 2.7.18 实例?
- java - Query 和 QueryMap 不适用于 Rest API
- c# - 如果我在邮递员中有文件内容,请上传文件
- angular - 基于离子(角度)中的活动选项卡显示标题标题
- reactjs - 编译器如何知道我必须在哪里放置代码?
- php - 使用 laravel 6 在线快速上传图片的最佳方法是什么?
- javascript - 如何检测cart_items是否存在并添加新产品而不更改之前的产品但在cart_items中添加新产品
- rust - 在 rust / tokio 中合并流