jQuery possède une limitation qui peut s’avérer très gênante : on ne peut ajouter !important
à une propriété CSS en utilisant un script jQuery.
Par exemple, ceci ne fonctionnera pas:
jQuery('.foo').css('border', '4px #000 solid !important');
Code language: JavaScript (javascript)
alors que cette déclaration sera bien appliquée:
jQuery('.foo').css('border', '4px #000 solid');
Code language: JavaScript (javascript)
Pour contourner cette limitation, je vous propose plusieurs solutions.
Première solution : utiliser la fonction addClass()
C’est probablement la solution la plus simple : il suffit d’ajouter une classe votre élément avec addClass()
, puis de définir le code CSS relatif à cette classe.
Exemple:
jQuery('.foo').addClass('border-black');
Code language: JavaScript (javascript)
et on ajoute le code CSS suivant:
.border-black{
border: 4px #000 solid !important;
}
Code language: CSS (css)
Deuxième solution : utiliser la fonction attr()
Une autre solution est d’utiliser la fonction attr()
, avec une concaténation pour garder le style CSS inline s’il est déjà présent:
jQuery('.foo').attr('style', function(i,s) { return (s || '') + 'border:4px #000 solid !important;' });
Code language: JavaScript (javascript)
Troisième solution : utiliser la propriété cssText
Toujours en utilisant la concaténation pour garder les styles inline existants, nous utilisons la propriété cssText
de la fonction css()
:
jQuery('.foo').css('cssText', jQuery('.foo').css('cssText')+'border: 4px #000 solid !important');
Code language: JavaScript (javascript)
Quatrième solution : utiliser style.setProperty()
Ce n’est pas parce que l’on utilise jQuery que nous devons oublier le vanilla JavaScript.
En l’occurrence, JS offre nativement la fonction style.setProperty()
qui nous permet d’appliquer notre style aisément:
jQuery('.foo').each(function(){
this.style.setProperty( 'border', '4px #000 solid', 'important' );
});
Code language: JavaScript (javascript)
Have fun!