2013-02-16 8 views
5

Ich habe eine Klasse in meinem <html> Element namens "no-js" platziert. Dies zeigt an, dass der Benutzer kein Javascript verwendet (ob es deaktiviert oder blockiert ist). Und dann möchte ich in einer von mir erstellten Skriptdatei "no-js" widerrufen und "js" injizieren, damit ich feststellen kann, ob der Benutzer JavaScript oder nicht über Klassen verwendet. Ich habe versucht, mit der replace() Methode durch Abfragen der HTML-Tag, aber es funktioniert nicht. Hier ist, was ich habe:JavaScript - Ersetzen der Klasse "no-js" durch die Klasse "js" funktioniert nicht?

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

Es gibt keine Fehler in Google Chrome oder Firefox Bug-Konsole, aber weder ist es no-js-js ändern. Ich würde den Tag <noscript> verwenden, aber ich mag es, die Markup-Seite sauber zu halten.

+0

Es ist nicht der Ersatz an Ort und Stelle tun. Sie müssen 'html.className = html.className.replace (" no-js "," js ");' – JJJ

+0

html.classList.remove ('no-js'); html.classList.add ('js'); – philipp

Antwort

7

replacekehrt die neue Zeichenfolge, ist es nicht das Original ändern.

Versuchen Sie html.className = 'js', da Sie bereits festgestellt haben, dass es der einzige Klassenname mit Ihrer if Aussage ist.

BEARBEITEN: Auch das <html>-Tag ist bereits als document.documentElement verfügbar.

document.documentElement.className = 'js'; 

Das ist alles, was Sie wirklich brauchen. Nein if Aussage, keine Variable, nichts.

+0

Oh ja! Ich dachte, das würde * js' zum HTML hinzufügen, nicht ersetzen. Aber dazu müsste ich '+ =' machen. Es funktionierte! Vielen Dank! –

1

Sie haben vergessen, die html.className auf den neuen Wert zuzuweisen:

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

Ah, das würde auch funktionieren, aber die andere Antwort ist einfacher. Vielen Dank! –

5

Die akzeptierte Antwort ist in der Tat richtig, aber dieser Weg wird alle Klassen des <html> ersetzen, nicht nur .no-js.

Dieses kleine Skript wird das gleiche tun, sondern stattdessen nur nach der no-js Klasse suchen und sie neu schreiben.

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

Nahm Skript von hier, sehr einfach! http://snipplr.com/view/63895/remove-nojs-class-from-html-tag-add-js-class/

1

Mit ein wenig regex

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