¿Agregar clase a <html> con Javascript?


87

¿Cómo se agrega una clase al <html>elemento raíz usando Javascript?


esta fue una de las preguntas que hice cuando comencé. Nunca encontré un buen lugar que lo mencionara. Me alegro de verlo aquí.
— Pow-Ian

Solo curiosidad, ¿por qué querrías hacer esto?
— David Hoerster

@David Para agregar un respaldo en caso de que Modernizr no se cargue. Modernizr agrega la clase "js" cuando se carga.
— Brandon Lebedev

1
Realmente debería agregar la clase "no-js" a su marcado si está usando modernizr. (Si modernizr carga, eliminará esta clase)
— Kevin Boucher

@Kevin - Ya lo hice. ¡Vaya a HTML5 Boilerplate !
— Brandon Lebedev

Respuestas:


110

Me gusta esto:

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

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

O use esto como su línea 'setter' para preservar cualquier clase aplicada previamente: (gracias @ ama2)

root.className += ' myCssClass';

O, según la compatibilidad del navegador requerida, puede utilizar el classList.add()método:

root.classList.add('myCssClass');

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

ACTUALIZAR:

Una solución más elegante para hacer referencia al HTMLelemento podría ser esta:

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

FYI, classlist.add / .remove no funciona en document.documentElement.
— Andy Mercer

@AndyMercer Es classList.add(caso de camellos).
— Kevin Boucher

Sí, obviamente, fue un error tipográfico. Pero lo que dije sigue siendo correcto. classListno funciona en document.documetElement.
— Andy Mercer

Lo probé en tres navegadores diferentes antes de responder, por lo que no fue "obviamente un error tipográfico". (Chrome, Firefox, Safari: root.classList.add('myCssClass')funcionó en los tres). ¿Está usando IE?
— Kevin Boucher

document.documentElement.classList.addparece funcionar bien aquí. ¿Los navegadores en 2018 comenzaron a admitir esto?
— adrian

14

Esto también debería funcionar:

document.documentElement.className = 'myClass';

Compatibilidad .

Editar:

IE 10 reconoce que es de solo lectura; todavía:

¿¡Funcionó!?

Obras de ópera:

Trabajos

También puedo confirmar que funciona en:

  • Cromo 26
  • Firefox 19.02
  • Safari 5.1.7

Su ejemplo tiene CARACTERES INVISIBLES, es decir, U+200Bdespués del apóstrofe final, lo que hace que falle la compilación en el paquete web y otros compiladores.
— entozoon

@entozoon que extraño! Gracias por señalar eso. Lo he arreglado ahora :)
— c24w

11

Te recomiendo que eches un vistazo a jQuery .

forma jQuery:

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

26
No necesita jQuery para seleccionar un elemento con JavaScript.
— David Hoerster

1
jQuery es de hecho fácil de aprender, y de todos modos se usa la mayor parte del tiempo, estos días. Pero sí, no lo necesita para esta tarea;)
— aebersold

1
sí, claro, sabemos qué es jquery, pero responder una pregunta puramente de JavaScript con "aprender jquery" es lo que me sorprendió :)
— povilasp

2
@aebersold Estoy de acuerdo en que jQuery es fácil de aprender y usar, pero con 50K para descargar (más una solicitud adicional) solo para agregar una clase, es un poco exagerado en mi humilde opinión.
— David Hoerster

¡Muerte al jQuery! ¡Vanilla JS por la victoria!
— Fresheyeball


7

Debe agregar la clase, no sobrescribirla

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

Todavía recomendaría usar jQuery para evitar incompatibilidades con el navegador


-2

Con Jquery ... Puede agregar clases a elementos html como este:

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

nameclassorid sin punto o # al principio

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.