Mostra / nascondi 'div' usando JavaScript


185

Per un sito web che sto facendo, voglio caricare un div e nasconderne un altro, quindi avere due pulsanti che alternano le visualizzazioni tra i div usando JavaScript.

Questo è il mio codice attuale

function replaceContentInContainer(target, source) {
  document.getElementById(target).innerHTML = document.getElementById(source).innerHTML;
}

function replaceContentInOtherContainer(replace_target, source) {
  document.getElementById(replace_target).innerHTML = document.getElementById(source).innerHTML;
}
<html>
<button onClick="replaceContentInContainer('target', 'replace_target')">View Portfolio</button>
<button onClick="replaceContentInOtherContainer('replace_target', 'target')">View Results</button>

<div>
  <span id="target">div1</span>
</div>

<div style="display:none">
  <span id="replace_target">div2</span>
</div>

La seconda funzione che sostituisce div2 non funziona, ma la prima è.

Risposte:


430

Come mostrare o nascondere un elemento:

Per mostrare o nascondere un elemento, manipola la proprietà di stile dell'elemento . Nella maggior parte dei casi, probabilmente vuoi solo cambiare la displayproprietà dell'elemento :

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

In alternativa, se desideri che l'elemento occupi spazio (come se nascondessi una cella di tabella), puoi invece modificare la visibilityproprietà dell'elemento :

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

Nascondere una raccolta di elementi:

Se vuoi nascondere una raccolta di elementi, basta scorrere su ciascun elemento e cambiare l'elemento displayin 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'));

Mostra una raccolta di elementi:

Il più delle volte, probabilmente si alternerà tra display: nonee display: block, il che significa che quanto segue può essere sufficiente quando si mostra una raccolta di elementi.

Se lo si desidera, è possibile specificare l'opzione desiderata displaycome secondo argomento 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

In alternativa, un approccio migliore per mostrare gli elementi sarebbe semplicemente rimuovere lo displaystile in linea al fine di riportarlo al suo stato iniziale. Quindi controlla lo displaystile calcolato dell'elemento per determinare se viene nascosto da una regola a cascata. In tal caso, mostra l'elemento.

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';
    }
  }
}

(Se vuoi fare un ulteriore passo in avanti, potresti persino imitare ciò che fa jQuery e determinare lo stile predefinito del browser dell'elemento aggiungendo l'elemento a uno spazio vuoto iframe(senza un foglio di stile in conflitto) e quindi recuperare lo stile calcolato. conoscerà il vero displayvalore della proprietà iniziale dell'elemento e non sarà necessario codificare un valore per ottenere i risultati desiderati.)

Attivazione / disattivazione del display:

Allo stesso modo, se si desidera attivare / disattivare l' displayelemento di un elemento o una raccolta di elementi, è possibile semplicemente scorrere su ciascun elemento e determinare se è visibile controllando il valore calcolato della displayproprietà. Se è visibile, impostare la displaya none, in caso contrario togliere la linea displaystyling, e se è ancora nascosto, impostare il displaysul valore specificato o quello predefinito hardcoded, 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'));
});


97

È inoltre possibile utilizzare il framework JavaScript jQuery :

Per nascondere il blocco div

$(".divIDClass").hide();

Per mostrare Div Block

$(".divIDClass").show();

17
La domanda non menziona l'uso di jQuery
MLeFevre il

53
che non è una ragione per il downvoting. la domanda non dice specificamente di non usare jquery e inoltre altre persone che vengono qui per visualizzare le risposte potrebbero non avere gli stessi vincoli del PO.
Kinjal Dixit,

5
@KinjalDixit Se IMRUP vuole aggiungere una nota secondo cui la sua risposta non utilizza JS vaniglia e si basa invece su jQuery, allora avrebbe qualche merito, anche se la domanda originale non è taggata per jQuery / menziona anche jQuery. Allo stato attuale è una risposta che utilizza una libreria senza menzionare che lo fa, poca (anche se probabilmente tutto ciò che è necessario) spiegazione e uso confuso di un selettore (usando il selettore di classe mentre si indica ID ?). Allo stato attuale, non credo sia una risposta utile a questa domanda.
MLeFevre,

3
Quando si aggiunge un esempio di jQuery (che è un approccio IMHO perfettamente valido), fornire anche un esempio JS vanilla per il confronto e spiegare all'OP la differenza. Oggi molti nuovi sviluppatori pensano che jQuery sia JavaScript. Una piccola istruzione li aiuterebbe a fare le scelte giuste.
Mark Cooper,

Penso che questa risposta sia stata molto utile e correlata alla domanda.
mfnx,

44

Puoi semplicemente manipolare lo stile del div in questione ...

document.getElementById('target').style.display = 'none';

Ma vorrei che mostrasse anche il contenuto del secondo div
Jake Ols,

20

Puoi nascondere / mostrare div utilizzando la funzione Js. campione sotto

<script>
    function showDivAttid(){

        if(Your Condition) {

            document.getElementById("attid").style.display = 'inline';
        }
        else
        {
            document.getElementById("attid").style.display = 'none';
        }
    }

</script>

HTML -

<div  id="attid" style="display:none;">Show/Hide this text</div>

se vuoi usare il nome della classe invece di Id, usa like document.getElementsByClassName ('CLASSNAME') [0] .style.display = 'none';
Vishwa,

14

Usando lo stile:

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

L'uso di un gestore eventi in JavaScript è migliore onclick=""dell'attributo 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 può aiutarti a manipolare facilmente gli elementi DOM!


Puoi provare l' hiddenattributo di HTML5
bobobobo il

12

Ho trovato molto utile questo semplice codice JavaScript!

#<script type="text/javascript">
    function toggle_visibility(id) 
    {
        var e = document.getElementById(id);
        if ( e.style.display == 'block' )
            e.style.display = 'none';
        else
            e.style.display = 'block';
    }
</script>

5

Imposta il tuo HTML come

<div id="body" hidden="">
 <h1>Numbers</h1>
 </div>
 <div id="body1" hidden="hidden">
 Body 1
 </div>

E ora imposta javascript come

function changeDiv()
  {
  document.getElementById('body').hidden = "hidden"; // hide body div tag
  document.getElementById('body1').hidden = ""; // show body1 div tag
  document.getElementById('body1').innerHTML = "If you can see this, JavaScript function worked"; 
  // display text if JavaScript worked
   }

1
<script type="text/javascript">
    function hide(){
        document.getElementById('id').hidden = true;
    }
    function show(){
        document.getElementById('id').hidden = false;
    }
</script>

L'uso di Hidden per un problema come questo non è probabilmente una buona idea - oltre a non essere supportato nelle versioni di IE prima delle 11, il poster sta effettivamente cercando di fare qualcosa di equivalente a una semplice interfaccia a schede, quindi gli elementi non saranno nascosti in tutti i contesti. In questo tipo di situazione, probabilmente è meglio usare 'display' per controllare il nascondiglio - vedi stackoverflow.com/questions/6708247/…
John - Not A Number

1

Semplicemente imposta l'attributo style di ID:

Per mostrare il div nascosto

<div id="xyz" style="display:none">
     ...............
</div>
//In JavaScript

document.getElementById('xyz').style.display ='block';  // to hide

Per nascondere il div mostrato

<div id="xyz">
     ...............
</div>
//In JavaScript

document.getElementById('xyz').style.display ='none';  // to display

0

E la risposta di Purescript, per le persone che usano l'alogeno:

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!" ]

Se "controlli elemento", vedrai qualcosa di simile a:

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

ma nulla verrà effettivamente visualizzato sullo schermo, come previsto.


0

Solo la funzione semplice deve implementare Mostra / nascondi 'div' usando JavaScript

<a id="morelink" class="link-more" style="font-weight: bold; display: block;" onclick="this.style.display='none'; document.getElementById('states').style.display='block'; return false;">READ MORE</a>


<div id="states" style="display: block; line-height: 1.6em;">
 text here text here text here text here text here text here text here text here text here text here text here text here text here text here text here text here text here text here text here text here  
    <a class="link-less" style="font-weight: bold;" onclick="document.getElementById('morelink').style.display='inline-block'; document.getElementById('states').style.display='none'; return false;">LESS INFORMATION</a>
    </div>

0

Ho trovato questa domanda e recentemente stavo implementando alcune UI usando Vue.js, quindi questa può essere una buona alternativa.

Innanzitutto il codice non si nasconde targetquando si fa clic su Visualizza profilo. Stai eseguendo l'override del contenuto targetcon 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

Puoi farlo facilmente con l'uso di 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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.