如何仅使用 JS 从当前元素中删除类并添加到下一个元素?

问题描述 投票:0回答:1

我有一个简单的 jquery 脚本,效果很好:

$(function(){

    $("button").click(function(){ 
        $(this).parent().fadeOut(500, function() {
            $(this).next().fadeIn(500);
        });
    });
    
});
section {
    width: 300px;
    height: 250px;
    background-color: #2ac99e;
    margin: auto;
    display: flex;
    flex-direction: column;
}
button {
    display: block;
    margin-top: auto;
    margin-right: auto;
    margin-left: auto;
    font-size: 2em;
    padding: 10px;
    margin-bottom: 10px;
}
#p2,#p3,#p4 {display:none;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>

<section id="p1">
    <div>Content for  class "1" Goes Here</div>
    <button>Next</button>
</section>

<section id="p2">
    <div>Content for  class "2" Goes Here</div>
    <button>Next</button>
</section>

<section id="p3">
  <div>Content for  class "3" Goes Here</div>
  <button>Next</button>
</section>

<section id="p4">
  <div>Content for  class "4" Goes Here</div>
</section>

基于此,我尝试创建一个简单的仅 JavaScript 版本,但很难让它工作。也许你可以告诉我为什么我无法通过第二个盒子?代码如下:

document.querySelector("button").onclick = function() {func()};

function func () {
    let btn = document.querySelector("button").parentElement;
    let next = document.querySelector("button").parentElement.nextElementSibling;

    console.log(btn);

    btn.classList.add('hide');
    next.classList.remove('hide');
}
section {
    width: 300px;
    height: 250px;
    background-color: #2ac99e;
    margin: auto;
    display: flex;
    flex-direction: column;
}
button {
    display: block;
    margin-top: auto;
    margin-right: auto;
    margin-left: auto;
    font-size: 2em;
    padding: 10px;
    margin-bottom: 10px;
}
.hide {display:none;}
<section id="p1">
    <div>Content for  class "1" Goes Here</div>
    <button>Next</button>
</section>

<section id="p2" class="hide">
    <div>Content for  class "2" Goes Here</div>
    <button>Next</button>
</section>

<section id="p3" class="hide">
  <div>Content for  class "3" Goes Here</div>
  <button>Next</button>
</section>

<section id="p4" class="hide">
  <div>Content for  class "4" Goes Here</div>
</section>

基本上我只需要隐藏现有元素并显示下一个元素。我知道我可以使用多个按钮创建多个功能,但我想要一个可重用的代码,以后我可以在其中添加任意数量的框,而不必每次都弄乱代码。

javascript show-hide
1个回答
0
投票

尝试以下方法:

<!DOCTYPE html>
 <html lang="en">
 <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
    .box {
        display: none;
    }
  </style>
  <title>Toggle Boxes</title>
</head>
<body>

<div class="box" style="display: block;">Box 1 <button 
      onclick="toggleBoxes(this)">Next</button></div>
<div class="box">Box 2 <button onclick="toggleBoxes(this)">Next</button>.</div>
<div class="box">Box 3 <button onclick="toggleBoxes(this)">Next</button></div>

<script>
    function toggleBoxes(button) {
        var currentBox = button.parentNode;
        var nextBox = currentBox.nextElementSibling;

        currentBox.style.display = 'none';
        nextBox.style.display = 'block';
    }
</script>

</body>
</html>

此代码定义了一个函数toggleBoxes,它将按钮作为参数,查找其父div(当前框)和下一个同级div(下一个框)。然后它设置显示属性来控制可见性。

请注意,我添加了默认样式以最初隐藏所有框。

© www.soinside.com 2019 - 2024. All rights reserved.