Adicionar classe a <html> com Javascript?


87

Como você adiciona uma classe ao <html>elemento raiz usando Javascript?


esta foi uma das perguntas que fiz quando comecei. Nunca encontrei um bom lugar que mencionasse isso. Estou feliz em ver isso aqui.
— Pow-Ian de

Apenas curiosidade - por que você deseja fazer isso?
— David Hoerster

@David Para adicionar um fallback no caso de Modernizr não carregar. Modernizr adiciona a classe "js" ao carregar.
— Brandon Lebedev

1
Você realmente deve adicionar a classe "no-js" à sua marcação se estiver usando o modernizr. (Se o modernizr carregar, ele removerá essa classe)
— Kevin Boucher

@Kevin - Já fiz. Go HTML5 Boilerplate !
— Brandon Lebedev

Respostas:


110

Como isso:

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

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

Ou use isso como sua linha 'setter' para preservar quaisquer classes aplicadas anteriormente: (obrigado @ ama2)

root.className += ' myCssClass';

Ou, dependendo do suporte do navegador necessário, você pode usar o classList.add()método:

root.classList.add('myCssClass');

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

ATUALIZAR:

Uma solução mais elegante para referenciar o HTMLelemento pode ser esta:

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

Para sua informação, classlist.add / .remove não funciona em document.documentElement.
— Andy Mercer

@AndyMercer É classList.add(caixa de camelo).
— Kevin Boucher

Sim, obviamente isso foi um erro de digitação. Mas o que eu disse ainda está correto. classListnão funciona em document.documetElement.
— Andy Mercer

Tentei em três navegadores diferentes antes de responder, então não foi "obviamente um erro de digitação". (Chrome, Firefox, Safari- root.classList.add('myCssClass')funcionou em todos os três.) Você está usando o IE?
— Kevin Boucher

document.documentElement.classList.addparece funcionar bem aqui. Os navegadores em 2018 começaram a oferecer suporte a isso?
— Adrian

14

Isso também deve funcionar:

document.documentElement.className = 'myClass';

Compatibilidade .

Editar:

O IE 10 considera que é somente leitura; ainda:

Funcionou!?

Opera funciona:

Trabalho

Também posso confirmar que funciona em:

  • Chrome 26
  • Firefox 19.02
  • Safari 5.1.7

Seu exemplo tem CARACTERES INVISÍVEIS, principalmente U+200Bapós o apóstrofo final, fazendo com que ele falhe na compilação no webpack e em outros compiladores!
— entozoon de

@entozoon que estranho! Obrigado por apontar isso. Eu
— consertei

11

Eu recomendo que você dê uma olhada no jQuery .

maneira jQuery:

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

26
Você não precisa do jQuery para selecionar um elemento com JavaScript.
— David Hoerster

1
O jQuery é realmente fácil de aprender e é usado na maioria das vezes, atualmente. Mas sim, você não precisa dele para esta tarefa;)
— aebersold

1
sim, certo, sabemos o que é jquery, mas responder a uma pergunta puramente javascript com "aprender jquery" é o que me surpreendeu :)
— povilasp

2
@aebersold Eu concordo que jQuery é fácil de aprender e usar, mas com 50K para baixar (mais um pedido adicional) apenas para adicionar uma classe, é um pouco exagero IMHO.
— David Hoerster

Morte ao jQuery! Vanilla JS para a vitória!
— Fresheyeball


7

Você deve anexar a classe, não sobrescrevê-la

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

Eu ainda recomendaria usar jQuery para evitar incompatibilidades de navegador


-2

Com Jquery ... Você pode adicionar classes a elementos html como este:

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

nameclassorid nenhum ponto ou # no início

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.