J'ai une simple et une solution flexible, un peu semblable à Volonté (mais avec l'avantage supplémentaire d'être valide en html):
Donne au corps de l'élément d'une classe de "jsOff". Supprimer (ou remplacer) cette avec JavaScript. Avoir CSS pour cacher tous les éléments avec une classe de "jsOnly" avec un élément parent avec une classe de "jsOff".
Cela signifie que si JavaScript est activé, le "jsOff" classe sera éliminé de l'organisme. Cela signifie que des éléments avec une classe de "jsOnly" n'auront pas d'un parent avec une classe de "jsOff" et donc ne pas correspondre au sélecteur CSS qui les cache, ainsi, ils seront affichés.
Si JavaScript est désactivé, le "jsOff" de la classe ne va pas être éliminés de l'organisme. Éléments avec "jsOnly" va avoir un parent avec "jsOff" et donc aura correspondent au sélecteur CSS qui les cache, donc ils seront cachés.
Voici le code:
<html>
<head>
<!-- put this in a separate stylesheet -->
<style type="text/css">
.jsOff .jsOnly{
display:none;
}
</style>
</head>
<body class="jsOff">
<script type="text/javascript">
document.body.className = document.body.className.replace('jsOff','jsOn');
</script>
<noscript><p>Please enable JavaScript and then refresh the page.</p></noscript>
<p class="jsOnly">I am only shown if JS is enabled</p>
</body>
</html>
C'est un code html valide. C'est simple. Il est flexible.
Il suffit d'ajouter le "jsOnly" classe à n'importe quel élément que vous souhaitez afficher uniquement quand JS est activé.
Veuillez noter que le code JavaScript qui supprime le "jsOff" classe doit être effectuée le plus tôt possible à l'intérieur de la balise body. Il ne peut être exécuté plus tôt, comme le corps de la balise ne sera pas encore là. Il ne doit pas être exécuté plus tard que cela signifie que des éléments avec les "jsOnly" classe peut ne pas être visible tout de suite (car ils correspondent au sélecteur CSS qui cache jusqu'à ce que le "jsOff" la classe est supprimée à partir de l'élément de corps).
Cela pourrait également fournir un mécanisme pour js-seulement le style (par exemple, .jsOn .someClass{}
) et no-js-seulement le style (par exemple, .jsOff .someOtherClass{}
). Vous pouvez l'utiliser pour fournir une alternative à l' <noscript>
:
.jsOn .noJsOnly{
display:none;
}