Dans mon programme, je veux faire les deux choses avec jquery/javascript:
Pour faire la première chose que j'utilise, la méthode $(".className").css()
, mais elle change de style uniquement pour les éléments qui déjà ont la classe className
, c'est-à-dire si je later ajoute className
à un élément son style ne sera pas nouveau. Comment puis-je résoudre ça?
Voir aussi à jsfiddle .
$("p").addClass("redclass");
$(".redclass").css("color", "darkRed");
$("span").addClass("redclass");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>I want to be red! And I am.</p>
<span>I want to be red too but I'm not :'(</span>
Résultat:
Un format plus court:
$("<style/>", {text: ".redclass {color: darkRed;}"}).appendTo('head');
L'extrait:
$("<style/>", {text: ".redclass {color: darkRed;}"}).appendTo('head');
$("p").addClass("redclass");
$("span").addClass("redclass");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>I want to be red! And I am.</p>
<span>I want to be red too but I'm not :'(</span>
@ synthet1c a décrit le problème. Ma solution est:
$("head").append('<style></style>');
var element = $("head").children(':last');
element.html('.redclass{color: darkred;}');
Bien que d’autres réponses (de travail) aient été fournies, elles ne répondent pas réellement à votre question - c’est-à-dire qu’elles ne ne modifient pas la classe css spécifiée, mais la surchargent en ajoutant une autre règle plus tard document.
Ils y parviennent, essentiellement:
Avant
.someClass
{
color: red;
}
Après
.someClass
{
color: red;
}
.someClass
{
color: white;
}
Dans de nombreux cas, une meilleure option serait de modifier l'attribut color de la règle existante.
Il se trouve que le navigateur conserve une collection de feuilles de style, de règles de feuille de style et d’attributs desdites règles. Nous préférerons peut-être plutôt trouver la règle existante et la modifier. (Nous préférerions certainement une méthode qui vérifie les erreurs par rapport à celle que je présente!)
Le premier message de la console provient de la 1 instance d'une règle #coords
. Les trois suivants proviennent des 3 instances de la règle .that
function byId(id){return document.getElementById(id)}
window.addEventListener('load', onDocLoaded, false);
function onDocLoaded(evt)
{
byId('goBtn').addEventListener('click', onGoBtnClicked, false);
}
function onGoBtnClicked(evt)
{
alterExistingCSSRuleAttrib('#coords', 'background-color', 'blue');
alterExistingCSSRuleAttrib('.that', 'color', 'red');
}
// useful for HtmlCollection, NodeList, String types (array-like types)
function forEach(array, callback, scope){for (var i=0,n=array.length; i<n; i++)callback.call(scope, array[i], i, array);} // passes back stuff we need
function alterExistingCSSRuleAttrib(selectorText, tgtAttribName, newValue)
{
var styleSheets = document.styleSheets;
forEach(styleSheets, styleSheetFunc);
function styleSheetFunc(CSSStyleSheet)
{
forEach(CSSStyleSheet.cssRules, cssRuleFunc);
}
function cssRuleFunc(rule)
{
if (selectorText.indexOf(rule.selectorText) != -1)
forEach(rule.style, cssRuleAttributeFunc);
function cssRuleAttributeFunc(attribName)
{
if (attribName == tgtAttribName)
{
rule.style[attribName] = newValue;
console.log('attribute replaced');
}
}
}
}
#coords
{
font-size: 0.75em;
width: 10em;
background-color: red;
}
.that
{
color: blue;
}
<style>.that{color: green;font-size: 3em;font-weight: bold;}</style>
<button id='goBtn'>Change css rules</button>
<div id='coords' class='that'>Test div</div>
<style>.that{color: blue;font-size: 2em;font-weight: bold;}</style>
Le problème avec lequel vous rencontrez un problème est que lorsque vous utilisez le sélecteur jQuery $('.redclass').css('color', 'darkRed')
, vous obtenez tous les éléments qui ont actuellement cette classe et utilisez javascript pour parcourir en boucle la collection et définir la propriété style.
Vous définissez ensuite la classe sur la plage suivante. Ce qui n'était pas inclus dans la collection au moment de la mise en couleur
Vous devez définir la classe dans votre fichier css afin qu’elle soit distribuée à tous les éléments ayant cette classe.
console.log($('.redclass').length)
$("p").addClass("redclass");
console.log($('.redclass').length)
// $(".redclass").css("color", "darkRed");
$("span").addClass("redclass");
console.log($('.redclass').length)
.redclass {
color: darkRed;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>I want to be red! And I am.</p>
<span>I want to be red too but I'm not :'(</span>