【问题标题】:Show hide content based on button click根据按钮点击显示隐藏内容
【发布时间】:2020-04-03 05:28:05
【问题描述】:

如何根据按钮点击显示/隐藏内容?

我能够实现这一点,如下所示,但我的代码很长,我确信有更好/更短的方法来做到这一点。

HTML

<p class="option2-top">option two</p>
<p class="option3-top">option three</p>

<button id="option-one">one</button>
<button id="option-two">two</button>
<button id="option-three">three</button>

<p class="option1-below">option one</p>
<p class="option2-below">option two</p>
<p class="option3-below">option three</p>

Javascript

var oneTop = document.querySelector(".option1-top");
var twoTop = document.querySelector(".option2-top");
var threeTop = document.querySelector(".option3-top");

var oneBelow = document.querySelector(".option1-below");
var twoBelow = document.querySelector(".option2-below");
var threeBelow = document.querySelector(".option3-below");

oneTop.style.display = "block";
twoTop.style.display = "none";
threeTop.style.display = "none";

oneBelow.style.display = "block";
twoBelow.style.display = "none";
threeBelow.style.display = "none";

document.getElementById("option-one").onclick = function () {
oneTop.style.display = "block";
twoTop.style.display = "none";
threeTop.style.display = "none";

oneBelow.style.display = "block";
twoBelow.style.display = "none";
threeBelow.style.display = "none";
};

document.getElementById("option-two").onclick = function () {
oneTop.style.display = "none";
twoTop.style.display = "block";
threeTop.style.display = "none";

oneBelow.style.display = "none";
twoBelow.style.display = "block";
threeBelow.style.display = "none";
};

document.getElementById("option-three").onclick = function () {
oneTop.style.display = "none";
twoTop.style.display = "none";
threeTop.style.display = "block";

oneBelow.style.display = "none";
twoBelow.style.display = "none";
threeBelow.style.display = "block";
};

这是一个有效的JSfiddle

我不介意 jQuery 解决方案!

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

        $(document).ready(function(){
         $(".opt").hide();
         $("button").click(function(){
           $("p").hide();
           class_nmae = $(this).attr('id');
           $("."+class_nmae).show();
         });
       }); 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <p class="option-one">option one</p>
        <p class="option-two opt">option two</p>
        <p class="option-three opt">option three</p>
        <p class="option-four opt">option four</p>
    
        <button id="option-one">one</button>
        <button id="option-two">two</button>
        <button id="option-three">three</button>
        <button id="option-four">four</button>
    
        <p class="option-one">option one</p>
        <p class="option-two opt">option two</p>
        <p class="option-three opt">option three</p>
        <p class="option-four opt">option four</p>
     you can use like this
        <p class="option-one">option one</p>
        <p class="option-two opt">option two</p>
        <p class="option-three opt">option three</p>
        <p class="option-four opt">option four</p>
    
        <button id="option-one">one</button>
        <button id="option-two">two</button>
        <button id="option-three">three</button>
        <button id="option-four">four</button>
    
        <p class="option-one">option one</p>
        <p class="option-two opt">option two</p>
        <p class="option-three opt">option three</p>
        <p class="option-four opt">option four</p>
    
        $(document).ready(function(){
         $(".opt").hide();
         $("button").click(function(){
           $("p").hide();
           class_nmae = $(this).attr('id');
           $("."+class_nmae).show();
         });
       }); 
    

    【讨论】:

      【解决方案2】:

      所有选项都有一个通用的类/选择器来隐藏所有选项。

      具有选项特定的类,然后按需显示。

      在按钮上有一个通用的类/选择器来添加事件监听器(在这种情况下单击)。

      这样,无论您添加多少选项,它们仍然有效。

      var buttons = document.querySelectorAll('.toggle-btn');
      buttons.forEach(function(btn) {
        btn.addEventListener('click', function(evt) {
          var button = evt.target;
          var btnOption = button.getAttribute('data-target');
          hideAllOptions();
          showOption(btnOption);
        });
      });
      
      function hideAllOptions() {
        document.querySelectorAll('.options').forEach(function(option) {
          option.style.display = 'none';
        });
      }
      
      function showOption(target) {
        document.querySelectorAll(target).forEach(function(option) {
          option.style.display = 'block';
        })
      }
      
      // Show first option on load
      buttons[0].click();
      <p class="options option1">option one</p>
      <p class="options option2">option two</p>
      <p class="options option3">option three</p>
      <p class="options option4">option four</p>
      
      <button class="toggle-btn" data-target=".option1">one</button>
      <button class="toggle-btn" data-target=".option2">two</button>
      <button class="toggle-btn" data-target=".option3">three</button>
      <button class="toggle-btn" data-target=".option4">four</button>
      
      <p class="options option1">option one</p>
      <p class="options option2">option two</p>
      <p class="options option3">option three</p>
      <p class="options option4">option four</p>

      【讨论】:

        【解决方案3】:

        原生 JavaScript 中一种可能的解决方案,不需要您更改 html:

        let topTexts = document.querySelectorAll('p[class$="top"');
        let bottomTexts = document.querySelectorAll('p[class$="below"');
        let buttons = document.querySelectorAll("button");
        
        for(let i = 0; i < buttons.length; i++) {
          buttons[i].onclick = () => {
            Array.from(topTexts).map((e, j) => (e.hidden = i !== j));
            Array.from(bottomTexts).map((e, j) => (e.hidden = i !== j));
          };
        }
        
        buttons[0].click();
        <p class="option1-top">option one</p>
        <p class="option2-top">option two</p>
        <p class="option3-top">option three</p>
        
        <button id="option-one">one</button>
        <button id="option-two">two</button>
        <button id="option-three">three</button>
        
        <p class="option1-below">option one</p>
        <p class="option2-below">option two</p>
        <p class="option3-below">option three</p>

        【讨论】:

          【解决方案4】:

          感谢大家的出色解决方案!

          我最终使用了@Neeraj Amoli 解决方案并改进如下:

            <div class="upper-timeline">
             <p class="option-one" style="opacity: 0;">option one</p>
             <p class="option-two" style="opacity: 0;">option two</p>
             <p class="option-three" style="opacity: 0;">option three</p>
             <p class="option-four" style="opacity: 0;">option four</p>
            </div>
            <div class="buttons">
              <button id="option-one">one</button>
              <button id="option-two">two</button>
              <button id="option-three">three</button>
              <button id="option-four">four</button>
            </div>
            <div class="lower-timeline">
             <p class="option-one" style="opacity: 0;">option one</p>
             <p class="option-two" style="opacity: 0;">option two</p>
             <p class="option-three" style="opacity: 0;">option three</p>
             <p class="option-four" style="opacity: 0;">option four</p>
            </div>
          
              $(document).ready(function(){
               $("p").addClass("remove");
               $(".option-one").addClass("show");
               $("button").hover(function(){
                 $("p").removeClass("show").addClass("remove");
                 class_nmae = $(this).attr('id');
                 $("."+class_nmae).removeClass("remove").addClass("show");
               });
             }); 
          

          jsfiddle

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-08-28
            • 2011-08-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-02-11
            相关资源
            最近更新 更多