Saya memiliki solusi sederhana dan fleksibel, agak mirip dengan Will (tetapi dengan manfaat tambahan sebagai html yang valid):
Berikan elemen tubuh kelas "jsOff". Hapus (atau ganti) ini dengan JavaScript. Memiliki CSS untuk menyembunyikan elemen apa pun dengan kelas "jsOnly" dengan elemen induk dengan kelas "jsOff".
Ini berarti jika JavaScript diaktifkan, kelas "jsOff" akan dihapus dari badan. Ini berarti bahwa elemen dengan kelas "jsOnly" tidak akan memiliki induk dengan kelas "jsOff" dan tidak akan cocok dengan pemilih CSS yang menyembunyikannya, sehingga akan ditampilkan.
Jika JavaScript dinonaktifkan, kelas "jsOff" tidak akan dihapus dari badan. Elemen dengan "jsOnly" akan memiliki induk dengan "jsOff" dan begitu juga dengan cocok dengan pemilih CSS yang menyembunyikannya, sehingga akan disembunyikan.
Berikut kodenya:
<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>
Ini html yang valid. Itu sederhana. Itu fleksibel.
Cukup tambahkan kelas "jsOnly" ke elemen apa pun yang ingin Anda tampilkan hanya saat JS diaktifkan.
Harap dicatat bahwa JavaScript yang menghapus kelas "jsOff" harus dijalankan sedini mungkin di dalam tag body. Ini tidak dapat dijalankan lebih awal, karena tag body belum akan ada di sana. Ini tidak boleh dijalankan nanti karena ini berarti bahwa elemen dengan kelas "jsOnly" mungkin tidak langsung terlihat (karena mereka akan cocok dengan pemilih CSS yang menyembunyikannya sampai kelas "jsOff" dihapus dari elemen body).
Ini juga dapat menyediakan mekanisme untuk gaya hanya-js (misalnya .jsOn .someClass{}
) dan gaya hanya-js (misalnya .jsOff .someOtherClass{}
). Anda dapat menggunakannya untuk memberikan alternatif untuk <noscript>
:
.jsOn .noJsOnly{
display:none;
}