2011-11-21 43 views
4

我禁用JavaScript時切換CSS時出現問題。切換CSS的Javascript已禁用

我有這樣的代碼:

<style type="text/css">.nonjsonly{display:none;}.jsonly{display:inline;}</style> 
<noscript><style type="text/css">.nonjsonly{display:inline}.jsonly{display:none}</style></noscript> 

女巫工作的權利,但W3C doesn't覈准,如無腳本是在HTML頭非法的(和代碼是頭部)。

任何想法如何製作?

在此先感謝

回答

7

一個更合適的方式來處理,這是首先把你的非JS CSS,沒有任何<noscript>標籤,然後它加載了JavaScript的客戶提供樣式表的腳本。具有JS功能的css應該級聯以覆蓋基本表單。

<style type='text/css'> 
    /* baseline CSS for all clients */ 
</style> 

<!-- Then a script loads an additional stylesheet which cascades to override the baseline --> 
<!-- Obviously, won't get loaded by noscript clients --> 
<script type='text/javascript'> 
    document.write("<link type='text/css' rel='stylesheet' href='/path/to/js-friendly.css' />"); 
</script> 
+0

簡單而有效!謝謝!我正在嘗試複雜的事情,改變班級屬性:D – Pablo

3

首先把默認的CSS:

<style type="text/css" src="default.css" /> 

所以非JS風格適用於每個人。然後使用一些JS來動態加載「js-enabled」樣式:

<script type="text/javascript"> 
    css = document.createElement('link'); 
    css.setAttribute('rel', 'stylsheet'); 
    css.setAttribute('type', 'text/css'); 
    css.setAttribute('href', 'js-styles.css'); // change as needed 
    document.getElementsByTagName('head')[0].appendChild(css); 
</script> 

它將覆蓋非js樣式。

1

你可以做這樣的事情

<script> 
    document.getElementsByTagName('body')[0].className += ' jsActive'; 
</script> 

該腳本編寫「jsActive」類到body元素,如果JavaScript是avalible。 你沒有必要了「noJavascipt」類,但你可以用CSS選擇和建立你Funcitons

+1

不要忘記添加一個空格:'+ ='jsActive'' – Eric

1
  1. 使用1樣式
  2. 通過JavaScript
  3. 添加.jshtml元素對於需要JavaScript的風格與.js

防爆前綴您選擇:

#foo 

成爲

.js #foo 

更妙的是,使用Modernizr檢測更先進的功能(它會自動添加.js太)。