我试图容纳没有 JavaScript 的用户。(顺便问一下,现在值得付出努力吗?)
在一个 HTML 文件中,我希望它的一部分在脚本打开时执行,另一部分在脚本关闭时执行。
标签让我做前者,<noscript>
但如何实现后者?如果脚本关闭,如何标记 HTML 的一部分,以便浏览器不解析它?
我试图容纳没有 JavaScript 的用户。(顺便问一下,现在值得付出努力吗?)
在一个 HTML 文件中,我希望它的一部分在脚本打开时执行,另一部分在脚本关闭时执行。
标签让我做前者,<noscript>
但如何实现后者?如果脚本关闭,如何标记 HTML 的一部分,以便浏览器不解析它?
我一直在寻找一种方法来做到这一点,以便我可以隐藏一个导航下拉菜单,当启用 javascript 时,该菜单会呈现非功能性。但是,所有更改显示属性的解决方案都不起作用。
因此,我首先为下拉菜单周围的 div 元素分配了一个 ID (ddown)。
然后,在 HTML 文档的 head 部分中,我将其添加到:
<noscript>
<style>
#ddown {display:none;}
</style>
</noscript>
这很奏效。不依赖于 javascript、jquery 或任何其他脚本:只是纯 HTML 和 CSS。
默认您想要隐藏的位与样式一样display:none
,并使用 jQuery 或 JavaScript 打开它们。
这是关于如何使用 jQuery 完成此操作的视频教程:http: //screenr.com/ya7
代码:
<body class="noscript">
<script>
$('body').removeClass('noscript');
</script>
</body>
然后body.noscript
相应地隐藏相关元素。
编辑 但是,对于像这样的小修复,JQuery 可能会臃肿,所以我建议Zauber Paracelsus 的回答,因为它不需要 JQuery。
顺便问一下,现在的努力值得吗?
是的,值得担心可访问性。您应该尽可能使用渐进增强,即制作一个无需脚本即可工作的基本版本,然后在其上添加脚本功能。
一个简单的例子是一个弹出链接。你可以做一个这样的:
<a href="javascript:window.open('http://example.com/');">link</a>
但是,如果有人(例如,中键单击或尝试为其添加书签,或禁用脚本等)此链接将不起作用。相反,您可以执行以下相同操作:
<a href="http://example.com/"
onclick="window.open(this.href); return false;">link</a>
它仍然不完美,因为您应该将行为层和结构层分开并避免内联事件处理程序,但它更好,因为它更易于访问并且不需要脚本。
jQuery方式:
$(document).ready(function(){
$("body").removeClass("noJS");
});
伪 CSS
body
.no-js-content
display: none;
body.noJS
.main
display: none;
.no-js-content
display: block;
HTML
<body class="noJS">
<div class="main">
This will show if JavaScript is activated
</div>
<div class='no-js-content'>
This will show when JavaScript is disabled
</div>
</body>
如果内容仅在启用 JavaScript 时才有意义,则应由 JavaScript 代码直接插入而不是渲染。这可以通过简单地将 HTML 模板作为 JavaScript 代码中的字符串来完成,或者如果 HTML 更复杂,则可以使用 Ajax。
正如Reinis I 所提到的,这就是渐进增强的概念。
关于在 body 标签上使用类名的 CSS 技术,我建议反其道而行之,并js-enabled
使用 JavaScript 向 body 标签添加一个 ' ' 类,这会改变页面 CSS。这符合我上面关于保持所有初始 HTML“非 JavaScript 友好”的评论。
您可以使用 Javascript 编辑页面的 HTML
document.querySelector('div').style.display = 'block';
div {
display: none;
}
<div>Div</div>
这使得没有 JS 就无法访问 div 中的内容,但是使用 JS 会将内容添加到使用 JS 的 div 中,您也可以使用 CSS 来做到这一点。要更改 CSS 添加:
document.querySelector('style').innerHTML = 'div{}';
document.querySelector('div, #div').innerHTML = 'Div';
<div id='div'></div>