Klasse mit Javascript zu <html> hinzufügen?


87

Wie fügt man dem <html>Stammelement mit Javascript eine Klasse hinzu ?


Dies war eine der Fragen, die ich gestellt habe, als ich anfing. Ich habe nie einen guten Ort gefunden, an dem es erwähnt wurde. Ich bin froh, es hier zu sehen.
Pow-Ian

Nur neugierig - warum willst du das tun?
David Hoerster

@David Zum Hinzufügen eines Fallbacks für den Fall, dass Modernizr nicht geladen wird. Modernizr fügt beim Laden die Klasse "js" hinzu.
Brandon Lebedev

1
Sie sollten die Klasse "no-js" wirklich zu Ihrem Markup hinzufügen, wenn Sie modernizr verwenden. (Wenn modernizr
Kevin Boucher

@ Kevin - Schon getan. Gehen Sie HTML5 Boilerplate !
Brandon Lebedev

Antworten:


107

So was:

var root = document.getElementsByTagName( 'html' )[0]; // '0' to assign the first (and only `HTML` tag)

root.setAttribute( 'class', 'myCssClass' );

Oder verwenden Sie dies als Ihre 'Setter'-Zeile, um alle zuvor angewendeten Klassen beizubehalten: (danke @ ama2)

root.className += ' myCssClass';

Abhängig von der erforderlichen Browserunterstützung können Sie die folgende classList.add()Methode verwenden:

root.classList.add('myCssClass');

https://developer.mozilla.org/en-US/docs/Web/API/Element/classList http://caniuse.com/#feat=classlist

AKTUALISIEREN:

Eine elegantere Lösung für die Referenzierung des HTMLElements könnte sein:

var root = document.documentElement;
root.className += ' myCssClass';
// ... or:
//  root.classList.add('myCssClass');
//

Zu Ihrer Information, classlist.add / .remove funktioniert nicht mit document.documentElement.
Andy Mercer

@ AndyMercer Es ist classList.add(Kamel Fall).
Kevin Boucher

Ja, das war offensichtlich ein Tippfehler. Aber was ich gesagt habe, ist immer noch richtig. classListfunktioniert nicht mit document.documetElement.
Andy Mercer

Ich habe es in drei verschiedenen Browsern versucht, bevor ich geantwortet habe, also war es nicht "offensichtlich ein Tippfehler". (Chrome, Firefox, Safari - root.classList.add('myCssClass')funktionierte in allen drei.) Verwenden Sie IE?
Kevin Boucher

document.documentElement.classList.addscheint hier gut zu funktionieren. Haben Browser im Jahr 2018 damit begonnen, dies zu unterstützen?
Adrian

12

Dies sollte auch funktionieren:

document.documentElement.className = 'myClass';

Kompatibilität .

Bearbeiten:

IE 10 geht davon aus, dass es schreibgeschützt ist. noch:

Es funktionierte!?

Opera funktioniert:

Funktioniert

Ich kann auch bestätigen, dass es funktioniert in:

  • Chrome 26
  • Firefox 19.02
  • Safari 5.1.7

Ihr Beispiel enthält UNSICHTBARE ZEICHEN, und zwar U+200Bnach dem letzten Apostroph, wodurch die Kompilierung in Webpack und anderen Compilern fehlschlägt!
Entozoon

@entozoon wie seltsam! Vielen Dank für den Hinweis. Ich habe es jetzt behoben :)
c24w

11

Ich würde empfehlen, dass Sie sich jQuery ansehen .

jQuery Weg:

$("html").addClass("myClass");

26
Sie benötigen jQuery nicht, um ein Element mit JavaScript auszuwählen.
David Hoerster

1
jQuery ist sehr einfach zu erlernen und wird heutzutage sowieso die meiste Zeit verwendet. Aber ja, du brauchst es nicht für diese Aufgabe;)
aebersold

1
Ja, richtig, wir wissen, was JQuery ist, aber die Beantwortung einer rein Javascript-Frage mit "Learn JQuery" hat mich überrascht :)
Povilasp

2
@aebersold Ich stimme zu, dass jQuery einfach zu erlernen und zu verwenden ist, aber bei 50K zum Herunterladen (plus einer zusätzlichen Anfrage), nur um eine Klasse hinzuzufügen, ist es meiner Meinung nach ein bisschen übertrieben.
David Hoerster

Tod der jQuery! Vanilla JS für den Sieg!
Fresheyeball


7

Sie sollten die Klasse anhängen und nicht überschreiben

var headCSS = document.getElementsByTagName("html")[0].getAttribute("class") || "";
document.getElementsByTagName("html")[0].setAttribute("class",headCSS +"foo");

Ich würde weiterhin empfehlen, jQuery zu verwenden, um Browser-Inkompatibilitäten zu vermeiden


-2

Mit Jquery ... Sie können HTML-Elementen wie folgt eine Klasse hinzufügen:

$(".divclass").find("p,h1,h2,h3,figure,span,a").addClass('nameclassorid');

nameclassorid kein Punkt oder # am Anfang

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.