2013-06-21 60 views
3

当javascript未启用时,我使用了<noscript>标记来隐藏某些元素;但是,它似乎并不奏效。<noscript>标记不起作用

我的文档声明:

<!DOCTYPE html> 

在我的文件的末尾我键入以下内容:

<noscript> 
<style type="text/css" scoped> #status {display:none;} </style> 
</noscript> 

</body> 
</html> 

但即使禁用JS后#status DIV仍然存在。我在这里错过了什么吗?

+0

我不确定链接问题的接受答案是否正确。见https://developer.mozilla.org/en-US/docs/Web/HTML/Element/noscript –

+0

@JamesMontagne最终目标是一样的,但问题不是。 –

+0

够公平的,我收回。 –

回答

11

删除style标记的scoped属性。它使您的CSS严格适用于<noscript>标签。

如果此属性存在,则样式仅适用于其父元素。

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/style#Attributes

+0

谢谢!它的工作:)不知道为什么我没有尝试。只是S.O.会马上标出这一点。允许我(时间限制) –

+1

我很想知道是什么促使你在这里首先使用'scoped' ... –

+0

啊,实际上我从来没有用过它,但在W3天前验证我的代码时,它向我展示了一个错误(缺少范围att)。这是我第一次使用这个att。 ,我忘了所有关于它,直到我今天试图禁用JS。 Noob,我知道:) –

5

一个易于管理的解决方案将是使默认隐藏的元素,并使用此:

<script>document.getElementById('status').style.display='block';</script> 

(或等效类基础的解决方案)

+1

可能更简单,但当你想在JS被禁用时做某些事情时,'

+2

我想到了一个类似的解决方案(添加了一个自定义类),但启用JS后,JS加载之前有一个很短的延迟。这对我很重要,所以我只想用HTML处理它。不管怎么说,还是要谢谢你。 –

+0

@MattBall我提高了你的答案,这有解释问题的额外好处。我做了我的替代选择。艾哈迈德,如果你把这个脚本放在主体的末尾,那么浏览器在执行脚本之前不会渲染页面。 –

0

尝试删除stylescope,如下面的代码。

 <noscript> 
      <style type="text/css"> #status {display:none;} </style> 
     </noscript> 
0

@ dystroy的回答是这样做的正确的方式,这是因为:

  • <style>元素不能放在<body>(除非他们有scoped属性)
  • <noscript>元素可以”放在头上。

但是,如果你不想延迟,您可以使用<head>如下:

<style id="noScriptSheet" type="text/css"> 
.onlyScript{ display:none;} 
</style> 

<script type="text/javascript"> 
function kill(el){ 
    return el.parentNode.removeChild(el); 
} 
kill(document.getElementById('noScriptSheet')); 
</script> 

,并添加一个类的元素:

<div class="onlyScript">Hello world!</div> 

演示http://jsfiddle.net/TQLfu/