2010-12-09 3 views
12

zu entfernen Ich habe ein Körperelement, auf dem ich ein paar Klassen hinzufügen. Und ich möchte die Klasse no-javascript davon entfernen, nachdem sie vom Browser gelesen wurde.Javascript, schnellste Möglichkeit, eine Klasse von `<body>`

<body class="foo boo no-javascript bla"> 
    <script type="javascript"> 
     // remove no-javascript class here 
    </script> 

Antwort

39

Nun, da zusätzliche Leerzeichen zwischen keine Rolle spielen, würde ich sagen:

document.body.className = document.body.className.replace("no-javascript",""); 

You can test it out here.

+0

das ist es. danke – Alex

+3

Stürzt um, wenn Sie eine andere Klasse namens "Piano-Javascript" zum Beispiel haben. –

+0

@Tim - ich stimme zu, aber schauen Sie sich den Klassennamen an, das ist ein * sehr * spezifischer Anwendungsfall. –

2
document.body.className = ''; 
+2

* alle * Klassen Dies entfernt, nicht nur 'no-javascript' –

+2

@El Ronnoco: Ich weiß. Aber es entfernt die Klasse, wie gefragt. Ich weiß, dass ich übermäßig wörtlich bin, aber das * ist * am schnellsten :) – sje397

+0

Punkt genommen. Denken wie ein echter Programmierer! :) –

2

Sie können

<noscript>Your browser does not support JavaScript!</noscript> 

durch Verwendung Sie noscript Tag setzen innerhalb von wird angezeigt Da alles, was all diese Arbeit einfach vermeiden, wenn Javascript deaktiviert ist und nichts wird, wenn JS eingeschaltet wird angezeigt.

+0

aber ich möchte die ganze Seite zeigen, auch wenn js deaktiviert ist, ich brauche nur die Klasse, um bestimmte Elemente mit CSS zu verstecken – Alex

15

Es sind keine nativen JavaScript-Funktionen für diese, aber ich benutze immer den folgenden Code (entlehnt/inspiriert von this snipplr

function removeClass(ele,cls) { 
    var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)'); 
    ele.className = ele.className.replace(reg,' '); 
} 

removeClass(document.getElementById("body"), "no-javascript") 

Die Regex hat einen besseren Job als die replace Funktionen in anderen Antworten erwähnt, weil überprüft es für die Existenz dieser genauen und nichts classname mehr oder weniger. Eine Klasse mit dem Namen „Piano-javascript“ mit dieser Version intakt bleiben würde.


für modern browsers (einschließlich IE10 und up) Sie verwenden:

document.querySelector('body').classList.remove('no-javascript'); 
+0

Nein, Ihre Antwort ist die einzige, die unter allen Umständen funktioniert. +1. –

+1

Eine Sache allerdings: Ich würde die 'hasClass()' Prüfung in 'removeClass()' verlieren. Es ist überflüssig. –

10
document.querySelector('body').classList.remove('no-javascript'); 
+1

Anstatt nur Code, geben Sie eine kleine Erklärung – Iain

Verwandte Themen