2013-06-21 61 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/