Selon le livre que je lis, il est préférable de changer un css, par classe, lorsque vous utilisez Javascript pour changer de css Mais comment? Quelqu'un peut-il donner un extrait de code pour cela?
Supposons que vous ayez:
<div id="mydiv" class="oldclass">text</div>
et les styles suivants:
.oldclass { color: blue }
.newclass { background-color: yellow }
Vous pouvez changer la classe sur mydiv
en javascript comme ceci:
document.getElementById('mydiv').className = 'newclass';
Après la manipulation du DOM, il vous restera:
<div id="mydiv" class="newclass">text</div>
Si vous souhaitez ajouter une nouvelle classe css sans supprimer l'ancienne, vous pouvez l'ajouter:
document.getElementById('mydiv').className += ' newClass';
Cela se traduira par:
<div id="mydiv" class="oldclass newclass">text</div>
Puisque classListest pris en charge par tous les principaux navigateurs et , jQuery supprime la prise en charge de IE <9 (dans la branche 2.x sous Stormblack dans le commentaire)
<div id="mydiv" class="oldclass">text</div>
vous pouvez facilement utiliser cette syntaxe:
document.getElementById('mydiv').classList.add("newClass");
Cela se traduira également par:
<div id="mydiv" class="oldclass newclass">text</div>
de plus, vous pouvez également utiliser remove, toggle, contient method.
Je recommande fortement jQuery. Cela devient alors aussi simple que:
$('#mydiv').addClass('newclass');
Vous n'avez pas à vous soucier de supprimer l'ancienne classe, car addClass () ne fera que l'ajouter. Vous avez également removeClass ();
L’autre avantage de la méthode getElementById () est que vous pouvez l’appliquer à plusieurs éléments en même temps avec une seule ligne de code.
$('div').addClass('newclass');
$('.oldclass').addClass('newclass');
Le premier exemple ajoutera la classe à tous les éléments DIV de la page. Le deuxième exemple ajoutera la nouvelle classe à tous les éléments qui ont actuellement l'ancienne classe.
utilisez la propriété className
:
document.getElementById('your_element_s_id').className = 'cssClass';
Pour ce faire, vous pouvez utiliser javascript dans Vanilla de deux manières. Le premier est className
et le second est classList
. className
fonctionne dans tous les navigateurs mais peut être difficile à manipuler lors de la modification de l'attribut de classe d'un élément. classList
est un moyen plus facile de modifier les classes d'un élément.
Pour définir directement l'attribut class d'un élément, vous devez utiliser className
; sinon, pour modifier la ou les classes d'un élément, il est plus facile d'utiliser classList
.
Html initial
<div id="ID"></div>
Définition de l'attribut de classe
var div = document.getElementById('ID');
div.className = "foo bar car";
Résultat:
<div id="ID" class="foo bar car"></div>
Ajouter une classe
div.classList.add("car");// Class already exists, nothing happens
div.classList.add("tar");
Note: Il n'est pas nécessaire de vérifier si une classe existe avant de l'ajouter. Si une classe doit être ajoutée, ajoutez-la simplement. S'il existe déjà, un duplicata ne sera pas ajouté.
Résultat:
<div id="ID" class="foo bar car tar"></div>
Supprimer une classe
div.classList.remove("car");
div.classList.remove("tar");
div.classList.remove("car");// No class of this name exists, nothing happens
Note: Tout comme add
, si une classe doit être supprimée, supprimez-la. S'il est là, il sera supprimé, sinon rien ne se passera.
Résultat:
<div id="ID" class="foo bar"></div>
Vérifier si un attribut de classe contient une classe spécifique
if (div.classList.contains("foo")) {
// Do stuff
}
Basculer une classe
var classWasAdded = div.classList.toggle("bar"); // "bar" gets removed
// classWasAdded is false since "bar" was removed
classWasAdded = div.classList.toggle("bar"); // "bar" gets added
// classWasAdded is true since "bar" was added
.toggle
a un second paramètre boolean qui, à mon avis, est redondant et ne mérite pas d'être dépassé.
Pour plus d'informations sur classList
, consultez MDN . Il couvre également la compatibilité du navigateur s’il s’agit d’un problème, qui peut être résolu en utilisant Modernizr pour la détection et un remplissage multiple au besoin.
Si vous voulez manipuler la classe CSS réelle au lieu de modifier les éléments DOM ou d'utiliser des classes CSS de modificateur, voir https://stackoverflow.com/a/50036923/482916 .
Vous pouvez également être intéressé par une modification à l’aide de jQuery: http://api.jquery.com/category/css/
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("div").addClass(function(){
return "par" ;
});
});
</script>
<style>
.par {
color: blue;
}
</style>
</head>
<body>
<div class="test">This is a paragraph.</div>
</body>
</html>