2013-02-16 11 views
5

Umieściłem klasę w moim elemencie <html> o nazwie "no-js". Oznacza to, że użytkownik nie korzysta z javascript (bez względu na to, czy jest wyłączony czy zablokowany). A następnie, w utworzonym przeze mnie pliku skryptu, chcę odwołać "no-js" i wstrzyknąć "js", aby ustalić, czy użytkownik korzysta z javascript, czy nie za pośrednictwem klas. Próbowałem użyć metody replace(), wysyłając zapytanie do znacznika HTML, ale nie działa. Oto co mam:JavaScript - Zastępując klasę "no-js" z klasą "js" nie działa?

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

Brak błędów w Google Chrome lub konsoli błędów Firefoksa, ale nie jest to zmieniając no-js do js. Chciałbym użyć tagu <noscript>, ale lubię utrzymywać go po stronie znaczników.

+0

Nie robi wymiany na miejscu. Musisz zrobić 'html.className = html.className.replace (" no-js "," js ");' – JJJ

+0

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

Odpowiedz

7

replacepowraca nowy łańcuch, to nie zmienia oryginalnego.

Spróbuj html.className = 'js', ponieważ już wiesz, że jest to jedyna nazwa klasy z Twoim oświadczeniem if.

EDYCJA: Również znacznik <html> jest już dostępny jako document.documentElement.

document.documentElement.className = 'js'; 

To wszystko, czego potrzebujesz, naprawdę. Bez instrukcji if, bez zmiennej, nic.

+0

O tak! Myślałem, że to * doda * 'js' do html, a nie zastąpi. Ale aby to zrobić, musiałbym wykonać '+ ='. Zadziałało! Dzięki! –

1

zapomniałeś przypisać html.className do nowej wartości:

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, to też by działało, ale druga odpowiedź jest prostsza. Dzięki! –

5

Przyjęta odpowiedź jest rzeczywiście poprawna, ale w ten sposób zastąpi wszystkie klasy <html>, nie tylko .no-js.

Ten mały skrypt zrobi to samo, ale zamiast tego wyszuka tylko klasę no-js i przerobi ją.

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

Wykonanie scenariusza tutaj, bardzo proste! http://snipplr.com/view/63895/remove-nojs-class-from-html-tag-add-js-class/

1

Przy odrobinie regex

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