javascript - 使用 JavaScript 按类隐藏 li 的元素

标签 javascript html hide

我有许多 li ,它们的类在 ul 标记中为 ans 。当单击隐藏按钮时,我想消失那些具有 ans 作为类的 li ,当单击显示按钮时,我希望所有它们重新出现,如果可能的话,几乎没有过渡。

我做了很少的 JavaScript,但它只隐藏了第一个位置 li 并且它不会影响其他 li。我不知道如何重新出现这些。

我的HTML:

<ul>
    <li class="one">Lorem ipsum dolor sit amet.</li>
    <li class="ans">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cum?</li>
    <hr>
    <li class="two">Lorem, ipsum.</li>
    <li class="ans">Lorem ipsum dolor sit amet consectetur adipisicing elit.</li>
    <hr>
    <li class="three">Lorem ipsum dolor sit.</li>
    <li class="ans">Lorem ipsum dolor sit amet consectetur adipisicing elit.</li>
</ul>

<div class="btn" style="text-align: center;">
                <button class="green" type="button">Show Answer</button>
                <button class="red" type="button">Hide Answer</button>
              </div>

我做的一些 JavaScript:

<script>
        document.getElementsByClassName("red")[0].addEventListener("click", closeBox);
function closeBox(){
  document.getElementsByClassName("ans")[0].style.display = "none";
}
        </script>

我更愿意使用 JavaScript,我不想要 jQuery。

最佳答案

因此,从技术上讲,第一个问题是您试图仅访问 getElementsByClassName 为您找到的第一个元素。您需要使用 Array.prototype.forEach.call 迭代所有元素,这将帮助您切换 li 项的可见性。

基于此,我认为你可以做这样的事情:

document.getElementsByClassName("red")[0].addEventListener("click", () => setVisiblity(false));
document.getElementsByClassName("green")[0].addEventListener("click", () => setVisiblity(true));

const setVisiblity = (visible) => {
  const ansElements = document.getElementsByClassName('ans');
  const style = visible ? 'list-item' : 'none';

  Array.prototype.forEach.call(ansElements, e => {
    e.style.display = style;
  });
}
<ul>
  <li class="one">Lorem ipsum dolor sit amet.</li>
  <li class="ans">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cum?</li>
  <hr>
    <li class="two">Lorem, ipsum.</li>
    <li class="ans">Lorem ipsum dolor sit amet consectetur adipisicing elit.</li>
  <hr>
  <li class="three">Lorem ipsum dolor sit.</li>
  <li class="ans">Lorem ipsum dolor sit amet consectetur adipisicing elit.</li>
</ul>

<div class="btn" style="text-align: center;">
  <button class="green" type="button">Show Answer</button>
  <button class="red" type="button">Hide Answer</button>
</div>

此外,我同意,jQuery 对于这个小代码解决方案来说完全是多余的。

希望这会有所帮助!

关于javascript - 使用 JavaScript 按类隐藏 li 的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59412770/

相关文章:

javascript - 自动提交下拉值到数据库中

html - CSS 3 内阴影

javascript - 在具有许多重复项的 jquery 中隐藏当前元素

html - 在透明标题下隐藏滚动内容

javascript - 为什么在 iOS Safari Mobile (iPhone/iPad) 中不触发模糊事件?

javascript - 在没有 jquery 的情况下获取第一个 <li>

javascript - chrome,javascript 在运行之间不更新

javascript - 有没有办法创建 "inline-none"CSS 效果?将被隐藏,但保留它在页面上占用的空间

javascript - 需要使用 Browserify 和 browserify-rails 的 sprockets 预处理文件

javascript - 如何将第二个模态定位在第一个模态之上?