2013-02-16 53 views
5

我在名爲「no-js」的<html>元素中放置了一個類。這表明用戶沒有使用JavaScript,(無論是禁用還是阻止)。然後,在我創建的腳本文件中,我想撤消「no-js」並注入「js」,以便可以確定用戶是否使用javascript或不通過類。我試圖通過查詢html標籤來使用replace()方法,但它不起作用。下面是我有:JavaScript - 用「js」類替換「no-js」類不工作?

var html = document.getElementsByTagName("html")[0]; 
if(html.className == "no-js") { 
    html.className.replace("no-js", "js"); // user has JS enabled 
} 

有在谷歌Chrome或Firefox的錯誤控制檯沒有錯誤,但也不是改變no-jsjs。我會使用<noscript>標記,但我希望保持標記的一面乾淨。

+0

它不會做更換到位。你必須做'html.className = html.className.replace(「no-js」,「js」);' – JJJ 2013-02-16 17:14:58

+0

html.classList.remove('no-js'); html.classList.add('js'); – philipp 2013-02-16 17:15:17

回答

7

replace回報新的字符串,它沒有修改原始。

嘗試html.className = 'js',因爲您已經確定它是您的if聲明中唯一的類名。

編輯:此外,<html>標記已可作爲document.documentElement

document.documentElement.className = 'js'; 

這就是你所需要的,真的。沒有if聲明,沒有變量,什麼都沒有。

+0

哦,是啊!我認爲這會*添加*'js'到html,而不是替換。但要做到這一點,我必須做'+ ='。有效!謝謝! – 2013-02-16 17:17:23

1

你忘了html.className分配給新的價值:

var html = document.getElementsByTagName("html")[0]; 
if(html.className == "no-js") { 
    html.className = html.className.replace("no-js", "js"); // user has JS enabled 
} 
+0

啊,這也可以,但其他答案更簡單。謝謝! – 2013-02-16 17:17:44

5

接受的答案確實是對的,但這種方式將取代<html>的所有分類,不僅僅是.no-js

這個小小的腳本會做同樣的事情,但是隻會搜索no-js類並重寫它。

document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js '; 

從這裏取了腳本,很簡單! http://snipplr.com/view/63895/remove-nojs-class-from-html-tag-add-js-class/

1

隨着一點點的正則表達式

(function(html) { 
 
    html.className = html.className.replace(/\bno-js\b/, 'js') 
 
})(document.documentElement);
<!DOCTYPE html> 
 
<html class="no-js"> 
 
<head> 
 
\t 
 
</body> 
 
</html>