ฉันมีวิธีแก้ปัญหาที่ง่ายและยืดหยุ่นซึ่งค่อนข้างคล้ายกับ Will's (แต่ด้วยประโยชน์เพิ่มเติมของการเป็น html ที่ถูกต้อง):
ให้องค์ประกอบของร่างกายเป็นคลาส "jsOff" ลบ (หรือแทนที่) สิ่งนี้ด้วย JavaScript มี CSS เพื่อซ่อนองค์ประกอบใด ๆ ที่มีคลาส "jsOnly" พร้อมกับองค์ประกอบหลักที่มีคลาส "jsOff"
ซึ่งหมายความว่าหากเปิดใช้งาน JavaScript คลาส "jsOff" จะถูกลบออกจากเนื้อหา ซึ่งหมายความว่าองค์ประกอบที่มีคลาส "jsOnly" จะไม่มีพาเรนต์ที่มีคลาส "jsOff" ดังนั้นจะไม่ตรงกับตัวเลือก CSS ที่ซ่อนไว้ดังนั้นองค์ประกอบเหล่านี้จะแสดง
หากปิดใช้งาน JavaScript คลาส "jsOff" จะไม่ถูกลบออกจากเนื้อหา องค์ประกอบที่มี "jsOnly" จะมีพาเรนต์ที่มี "jsOff" ดังนั้นจะตรงกับตัวเลือก CSS ที่ซ่อนองค์ประกอบเหล่านี้ดังนั้นองค์ประกอบเหล่านี้จะถูกซ่อน
นี่คือรหัส:
<html>
<head>
<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>
เป็น html ที่ถูกต้อง มันเป็นเรื่องง่าย มีความยืดหยุ่น
เพียงเพิ่มคลาส "jsOnly" ให้กับองค์ประกอบใด ๆ ที่คุณต้องการให้แสดงเมื่อเปิดใช้งาน JS เท่านั้น
โปรดทราบว่า JavaScript ที่ลบคลาส "jsOff" ควรดำเนินการโดยเร็วที่สุดภายในแท็กเนื้อหา ไม่สามารถดำเนินการได้ก่อนหน้านี้เนื่องจากแท็กเนื้อหาจะยังไม่มี ไม่ควรดำเนินการในภายหลังเนื่องจากจะหมายความว่าองค์ประกอบที่มีคลาส "jsOnly" อาจไม่สามารถมองเห็นได้ในทันที (เนื่องจากจะจับคู่ตัวเลือก CSS ที่ซ่อนไว้จนกว่าคลาส "jsOff" จะถูกลบออกจากองค์ประกอบเนื้อหา)
นอกจากนี้ยังสามารถเป็นกลไกสำหรับการจัดแต่งทรงผมเฉพาะ js (เช่น .jsOn .someClass{}
) และการไม่ใช้ js เท่านั้น (เช่น.jsOff .someOtherClass{}
) คุณสามารถใช้เพื่อเป็นทางเลือกให้กับ<noscript>
:
.jsOn .noJsOnly{
display:none;
}