Show/hide 'div' using JavaScript

前端 未结 14 837
伪装坚强ぢ
伪装坚强ぢ 2020-11-22 04:18

For a website I\'m doing, I want to load one div, and hide another, then have two buttons that will toggle views between the div using JavaScript.

This is my

相关标签:
14条回答
  • 2020-11-22 04:40

    Using style:

    <style type="text/css">
       .hidden {
            display: none;
       {
       .visible {
            display: block;
       }
    </style>
    

    Using an event handler in JavaScript is better than the onclick="" attribute in HTML:

    <button id="RenderPortfolio_Btn">View Portfolio</button>
    <button id="RenderResults_Btn">View Results</button>
    
    <div class="visible" id="portfolio">
        <span>div1</span>
    </div>
    
    <div class"hidden" id="results">
        <span>div2</span>
    </div>
    

    JavaScript:

    <script type="text/javascript">
    
        var portfolioDiv = document.getElementById('portfolio');
        var resultsDiv = document.getElementById('results');
    
        var portfolioBtn = document.getElementById('RenderPortfolio_Btn');
        var resultsBtn = document.getElementById('RenderResults_Btn');
    
        portfolioBtn.onclick = function() {
            resultsDiv.setAttribute('class', 'hidden');
            portfolioDiv.setAttribute('class', 'visible');
        };
    
        resultsBtn.onclick = function() {
            portfolioDiv.setAttribute('class', 'hidden');
            resultsDiv.setAttribute('class', 'visible');
        };
    
    </script>
    

    jQuery may help you to manipulate DOM elements easy!

    0 讨论(0)
  • 2020-11-22 04:42

    I found this question and recently I was implementing some UIs using Vue.js so this can be a good alternative.

    First your code is not hiding target when you click on View Profile. You are overriding the content target with div2.

    let multiple = new Vue({
      el: "#multiple",
      data: {
        items: [{
            id: 0,
            name: 'View Profile',
            desc: 'Show profile',
            show: false,
          },
          {
            id: 1,
            name: 'View Results',
            desc: 'Show results',
            show: false,
          },
        ],
        selected: '',
        shown: false,
      },
      methods: {
        showItem: function(item) {
          if (this.selected && this.selected.id === item.id) {
            item.show = item.show && this.shown ? false : !item.show;
          } else {
            item.show = (this.selected.show || !item.show) && this.shown ? true : !this.shown;
          }
          this.shown = item.show;
          this.selected = item;
        },
      },
    });
    <div id="multiple">
      <button type="button" v-for="item in items" v-on:click="showItem(item)">{{item.name}}</button>
    
      <div class="" v-if="shown">: {{selected.desc}}</div>
    </div>
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.7/vue.js"></script>

    0 讨论(0)
  • 2020-11-22 04:43

    And the Purescript answer, for people using Halogen:

    import CSS (display, displayNone)
    import Halogen.HTML as HH
    import Halogen.HTML.CSS as CSS
    
    render state = 
      HH.div [ CSS.style $ display displayNone ] [ HH.text "Hi there!" ]
    

    If you "inspect element", you'll see something like:

    <div style="display: none">Hi there!</div>
    

    but nothing will actually display on your screen, as expected.

    0 讨论(0)
  • 2020-11-22 04:45
    <script type="text/javascript">
        function hide(){
            document.getElementById('id').hidden = true;
        }
        function show(){
            document.getElementById('id').hidden = false;
        }
    </script>
    
    0 讨论(0)
  • 2020-11-22 04:49

    How to show or hide an element:

    In order to show or hide an element, manipulate the element's style property. In most cases, you probably just want to change the element's display property:

    element.style.display = 'none';           // Hide
    element.style.display = 'block';          // Show
    element.style.display = 'inline';         // Show
    element.style.display = 'inline-block';   // Show
    

    Alternatively, if you would still like the element to occupy space (like if you were to hide a table cell), you could change the element's visibility property instead:

    element.style.visibility = 'hidden';      // Hide
    element.style.visibility = 'visible';     // Show
    

    Hiding a collection of elements:

    If you want to hide a collection of elements, just iterate over each element and change the element's display to none:

    function hide (elements) {
      elements = elements.length ? elements : [elements];
      for (var index = 0; index < elements.length; index++) {
        elements[index].style.display = 'none';
      }
    }
    
    // Usage:
    hide(document.querySelectorAll('.target'));
    hide(document.querySelector('.target'));
    hide(document.getElementById('target'));
    

    hide(document.querySelectorAll('.target'));
    
    function hide (elements) {
      elements = elements.length ? elements : [elements];
      for (var index = 0; index < elements.length; index++) {
        elements[index].style.display = 'none';
      }
    }
    <div class="target">This div will be hidden.</div>
    
    <span class="target">This span will be hidden as well.</span>

    Showing a collection of elements:

    Most of the time, you will probably just be toggling between display: none and display: block, which means that the following may be sufficient when showing a collection of elements.

    You can optionally specify the desired display as the second argument if you don't want it to default to block.

    function show (elements, specifiedDisplay) {
      elements = elements.length ? elements : [elements];
      for (var index = 0; index < elements.length; index++) {
        elements[index].style.display = specifiedDisplay || 'block';
      }
    }
    
    // Usage:
    var elements = document.querySelectorAll('.target');
    show(elements);
    
    show(elements, 'inline-block'); // The second param allows you to specify a display value
    

    var elements = document.querySelectorAll('.target');
    
    show(elements, 'inline-block'); // The second param allows you to specify a display value
    
    show(document.getElementById('hidden-input'));
    
    function show (elements, specifiedDisplay) {
      elements = elements.length ? elements : [elements];
      for (var index = 0; index < elements.length; index++) {
        elements[index].style.display = specifiedDisplay || 'block';
      }
    }
    <div class="target" style="display: none">This hidden div should have a display of 'inline-block' when it is shown.</div>
    
    <span>Inline span..</span>
    
    <input id="hidden-input" />

    Alternatively, a better approach for showing the element(s) would be to merely remove the inline display styling in order to revert it back to its initial state. Then check the computed display style of the element in order to determine whether it is being hidden by a cascaded rule. If so, then show the element.

    function show (elements, specifiedDisplay) {
      var computedDisplay, element, index;
    
      elements = elements.length ? elements : [elements];
      for (index = 0; index < elements.length; index++) {
        element = elements[index];
    
        // Remove the element's inline display styling
        element.style.display = '';
        computedDisplay = window.getComputedStyle(element, null).getPropertyValue('display');
    
        if (computedDisplay === 'none') {
            element.style.display = specifiedDisplay || 'block';
        }
      }
    }
    

    show(document.querySelectorAll('.target'));
    
    function show (elements, specifiedDisplay) {
      var computedDisplay, element, index;
    
      elements = elements.length ? elements : [elements];
      for (index = 0; index < elements.length; index++) {
        element = elements[index];
    
        // Remove the element's inline display styling
        element.style.display = '';
        computedDisplay = window.getComputedStyle(element, null).getPropertyValue('display');
    
        if (computedDisplay === 'none') {
            element.style.display = specifiedDisplay || 'block';
        }
      }
    }
    <span class="target" style="display: none">Should revert back to being inline.</span>
    
    <span class="target" style="display: none">Inline as well.</span>
    
    <div class="target" style="display: none">Should revert back to being block level.</div>
    
    <span class="target" style="display: none">Should revert back to being inline.</span>

    (If you want to take it a step further, you could even mimic what jQuery does and determine the element's default browser styling by appending the element to a blank iframe (without a conflicting stylesheet) and then retrieve the computed styling. In doing so, you will know the true initial display property value of the element and you won't have to hardcode a value in order to get the desired results.)

    Toggling the display:

    Similarly, if you would like to toggle the display of an element or collection of elements, you could simply iterate over each element and determine whether it is visible by checking the computed value of the display property. If it's visible, set the display to none, otherwise remove the inline display styling, and if it's still hidden, set the display to the specified value or the hardcoded default, block.

    function toggle (elements, specifiedDisplay) {
      var element, index;
    
      elements = elements.length ? elements : [elements];
      for (index = 0; index < elements.length; index++) {
        element = elements[index];
    
        if (isElementHidden(element)) {
          element.style.display = '';
    
          // If the element is still hidden after removing the inline display
          if (isElementHidden(element)) {
            element.style.display = specifiedDisplay || 'block';
          }
        } else {
          element.style.display = 'none';
        }
      }
      function isElementHidden (element) {
        return window.getComputedStyle(element, null).getPropertyValue('display') === 'none';
      }
    }
    
    // Usage:
    document.getElementById('toggle-button').addEventListener('click', function () {
      toggle(document.querySelectorAll('.target'));
    });
    

    document.getElementById('toggle-button').addEventListener('click', function () {
        toggle(document.querySelectorAll('.target'));
    });
    
    function toggle (elements, specifiedDisplay) {
      var element, index;
    
      elements = elements.length ? elements : [elements];
      for (index = 0; index < elements.length; index++) {
        element = elements[index];
    
        if (isElementHidden(element)) {
          element.style.display = '';
    
          // If the element is still hidden after removing the inline display
          if (isElementHidden(element)) {
            element.style.display = specifiedDisplay || 'block';
          }
        } else {
          element.style.display = 'none';
        }
      }
      function isElementHidden (element) {
        return window.getComputedStyle(element, null).getPropertyValue('display') === 'none';
      }
    }
    .target { display: none; }
    <button id="toggle-button">Toggle display</button>
    
    <span class="target">Toggle the span.</span>
    
    <div class="target">Toggle the div.</div>

    0 讨论(0)
  • 2020-11-22 04:52

    You can easily achieve this with the use of jQuery .toggle().

    $("#btnDisplay").click(function() {
      $("#div1").toggle();
      $("#div2").toggle();
    });
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div id="div1">
      First Div
    </div>
    <div id="div2" style="display: none;">
      Second Div
    </div>
    <button id="btnDisplay">Display</button>
    
    0 讨论(0)
提交回复
热议问题