Comment afficher ou masquer un élément:
Pour afficher ou masquer un élément, manipulez la propriété de style de l'élément . Dans la plupart des cas, vous souhaitez probablement simplement modifier la display
propriété de l'élément :
element.style.display = 'none';
element.style.display = 'block';
element.style.display = 'inline';
element.style.display = 'inline-block';
Sinon, si vous souhaitez toujours que l'élément occupe de l'espace (comme si vous deviez masquer une cellule de tableau), vous pouvez modifier la visibility
propriété de l'élément à la place:
element.style.visibility = 'hidden';
element.style.visibility = 'visible';
Masquer une collection d'éléments:
Si vous souhaitez masquer une collection d'éléments, parcourez simplement chaque élément et changez l'élément display
en none
:
function hide (elements) {
elements = elements.length ? elements : [elements];
for (var index = 0; index < elements.length; index++) {
elements[index].style.display = 'none';
}
}
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>
Affichage d'une collection d'éléments:
La plupart du temps, vous basculerez probablement simplement entre display: none
et display: block
, ce qui signifie que ce qui suit peut être suffisant pour afficher une collection d'éléments.
Vous pouvez éventuellement spécifier le paramètre souhaité display
comme deuxième argument si vous ne souhaitez pas qu'il soit défini par défaut block
.
function show (elements, specifiedDisplay) {
elements = elements.length ? elements : [elements];
for (var index = 0; index < elements.length; index++) {
elements[index].style.display = specifiedDisplay || 'block';
}
}
var elements = document.querySelectorAll('.target');
show(elements);
show(elements, 'inline-block');
var elements = document.querySelectorAll('.target');
show(elements, 'inline-block');
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" />
En variante, une meilleure approche pour montrer le ou les éléments serait de simplement supprimer le display
style en ligne afin de le ramener à son état initial. Vérifiez ensuite le display
style calculé de l'élément afin de déterminer s'il est masqué par une règle en cascade. Si tel est le cas, montrez l'élément.
function show (elements, specifiedDisplay) {
var computedDisplay, element, index;
elements = elements.length ? elements : [elements];
for (index = 0; index < elements.length; index++) {
element = elements[index];
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];
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>
(Si vous souhaitez aller plus loin, vous pouvez même imiter ce que fait jQuery et déterminer le style de navigateur par défaut de l'élément en ajoutant l'élément à un espace vide iframe
(sans feuille de style en conflit), puis récupérer le style calculé. Ce faisant, vous connaîtra la vraie display
valeur de propriété initiale de l'élément et vous n'aurez pas à coder en dur une valeur pour obtenir les résultats souhaités.)
Basculer l'affichage:
De même, si vous souhaitez basculer display
entre un élément ou une collection d'éléments, vous pouvez simplement parcourir chaque élément et déterminer s'il est visible en vérifiant la valeur calculée de la display
propriété. Si elle est visible, réglez le display
à none
, sinon retirer la ligne de display
style, et si elle est toujours caché, définissez la display
à la valeur spécifiée ou par défaut 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 (isElementHidden(element)) {
element.style.display = specifiedDisplay || 'block';
}
} else {
element.style.display = 'none';
}
}
function isElementHidden (element) {
return window.getComputedStyle(element, null).getPropertyValue('display') === 'none';
}
}
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 (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>