Comment supprimer un style ajouté avec la fonction .css ()?


868

Je change CSS avec jQuery et je souhaite supprimer le style que j'ajoute en fonction de la valeur d'entrée:

if(color != '000000') $("body").css("background-color", color); else // remove style ?

Comment puis-je faire ceci?
Notez que la ligne ci-dessus s'exécute chaque fois qu'une couleur est sélectionnée à l'aide d'un sélecteur de couleurs (c'est-à-dire lorsque la souris se déplace sur une roue chromatique).

2ème note: je ne peux pas faire cela avec css("background-color", "none")car cela supprimera le style par défaut des fichiers CSS .
Je veux juste supprimer le background-colorstyle en ligne ajouté par jQuery .



mieux essayer addClass / removeClass en fonction de votre fonctionnalité. Cela n'affectera pas les autres styles.
Prabhakaran

Réponses:


1333

Changer la propriété en une chaîne vide semble faire le travail:

$.css("background-color", "");

4
@baacke C'est dommage quand le supposé "standard" est terriblement dépassé et perd beaucoup de temps de développement. J'ai peu de sympathie pour les entreprises qui choisissent d'utiliser des logiciels obsolètes, je ne vois pas pourquoi je devrais passer plus de temps à développer pour elles.
andrewb

33
Je dois prendre parti pour @baacke ici. Notre client a toujours une exigence minimale officielle de IE6 (!!). Le problème est que leurs clients sont partout dans le monde, y compris dans les pays moins développés. Les «clients du client» peuvent utiliser de très vieux ordinateurs pour faire affaire avec notre client. Donc, l'ancien navigateur doit être au moins supporté au minimum
sinon

8
Vous ne pouvez pas définir les exigences de toute solution que vous développez pour un client. Si ce client veut ou a besoin de support pour un navigateur plus ancien, c'est votre travail de le fournir, point final. Vous parlez de "qui s'en soucie" donnez une mauvaise réputation aux vrais ingénieurs.
Ed DeGagne

5
@EdDeGagne - Vous devez constamment arrêter de prendre en charge les anciennes versions d'IE. Cela améliore votre base de code et motive les visiteurs à ne pas utiliser un ancien IE. La seule chose difficile est de savoir quand pouvez-vous abandonner le support. Les sites Web de Google, ayant beaucoup de visiteurs, s'ils ont décidé de laisser tomber un ancien IE, alors vous pouvez leur faire confiance que c'était une bonne décision. Une entreprise est même allée jusqu'à dire à ses utilisateurs qu'il était plus avantageux pour eux d'acheter un ordinateur moderne à chaque ancien utilisateur IE que de maintenir leur code IE (ce qui est exactement ce qu'ils proposaient).
janko-m

5
J'ai arrêté de lire quand j'ai vu "IE8 est toujours la norme, même sur Windows 7"
Capsule

544

La réponse acceptée fonctionne mais laisse un styleattribut vide sur le DOM dans mes tests. Pas grave, mais cela supprime tout:

removeAttr( 'style' );

Cela suppose que vous souhaitez supprimer tous les styles dynamiques et revenir au style de feuille de style.


C'est une bonne idée mais buggé dans jQuery, voir le bug soumis: bugs.jquery.com/ticket/9500
Tosh

4
@Tosh Ce bug a été résolu le 25/08/2011: bugs.jquery.com/…
ThinkingStiff

Je sais mais au moins dans la version 1.7 c'est toujours buggé, je n'ai pas testé 1.8
Tosh

7
Cela supprimera également toutes les autres propriétés de l'attribut style. Choisissez donc judicieusement.
rythme de codage

1
C'est intelligent! la réponse acceptée ne fonctionnerait pas dans les situations où le style en ligne créé par jquery devrait remplacer les styles css, mais cette méthode fonctionne bien dans toutes les situations.
Farzad YZ

170

Il existe plusieurs façons de supprimer une propriété CSS à l'aide de jQuery:

1. Définir la propriété CSS à sa valeur par défaut (initiale)

.css("background-color", "transparent")

Voir la valeur initiale de la propriété CSS sur MDN . Ici, la valeur par défaut est transparent. Vous pouvez également utiliser inheritpour plusieurs propriétés CSS pour hériter l'attribut de son parent. Dans CSS3 / CSS4, vous pouvez également utiliser initial, revertou unsetmais ces mots clés peuvent avoir une prise en charge limitée du navigateur.

2. Suppression de la propriété CSS

Une chaîne vide supprime la propriété CSS, c'est-à-dire

.css("background-color","")

Mais attention, comme spécifié dans la documentation jQuery .css () , cela supprime la propriété mais il a des problèmes de compatibilité avec IE8 pour certaines propriétés abrégées CSS, y compris l' arrière-plan .

Définir la valeur d'une propriété de style sur une chaîne vide - par exemple $ ('# mydiv'). Css ('color', '') - supprime cette propriété d'un élément si elle a déjà été directement appliquée, que ce soit dans le style HTML , par la méthode .css () de jQuery, ou par la manipulation DOM directe de la propriété de style. Cependant, il ne supprime pas un style qui a été appliqué avec une règle CSS dans une feuille de style ou un élément. Avertissement: une exception notable est que, pour IE 8 et les versions antérieures, la suppression d'une propriété abrégée telle qu'une bordure ou un arrière-plan supprimera entièrement ce style de l'élément, indépendamment de ce qui est défini dans une feuille de style ou un élément .

3. Suppression de tout le style de l'élément

.removeAttr("style")

49

J'ai obtenu le moyen de supprimer un attribut de style avec du JavaScript pur juste pour vous faire savoir le chemin du JavaScript pur

var bodyStyle = document.body.style;
if (bodyStyle.removeAttribute)
    bodyStyle.removeAttribute('background-color');
else        
    bodyStyle.removeProperty('background-color');

11
Le gars utilise déjà jQuery ... pourquoi s'embêter à réimplémenter une méthode multi-navigateur!?!?
billy

32
parce que jquery n'est pas tout, parce qu'elle ou peut-être devrais-je dire que chacun de nous en tant que développeurs devrait savoir ce que signifie la compatibilité et comment faire une telle chose avec des langages de base comme JavaScript, c'est peut-être ma théorie, j'ai déjà créé mon propre cadre de ma connaissance du noyau JavaScript, je refuse d'utiliser d'autres choses j'ai mon propre concept et ma façon de penser :) et en passant merci pour votre (-) je devais juste être une valeur ajoutée :) et aussi par la façon dont le gars n'est pas un gars elle est un elle a appelé Alex
Marwan

1
Je veux juste noter que vous ne devriez pas vérifier document.all si vous ne l'utilisez pas. Vous pouvez peut-être le vérifier comme ceci: if (elm.style.removeProperty) {elm.style.removeProperty (propertyName); } else if (elm.style.removeAttribute) {elm.style.removeAttribute (attributeName); }
Richard

vous avez raison, il devrait en être ainsi si (navigator.appName == "Microsoft Internet Explorer") document.body.style.removeAttribute ('background-color'); else document.body.style.removeProperty ('background-color'); et d'autre part, votre solution est juste aussi :) merci pour votre note
Marwan

9
Non, vous devez absolument vérifier si cette fonction existe plutôt que de vérifier le navigateur. Et si MS décide de changer le nom de la fonction dans la prochaine version d'IE? Allez-vous ensuite vérifier la version d'IE également?
j03w

24

Cela supprimera la balise complète:

  $("body").removeAttr("style");

C'est une solution approximative et ne fonctionnerait pas toujours car elle supprime le style de l'élément complet
Konstantin Zadiran

19

l'une ou l'autre de ces fonctions jQuery devrait fonctionner:

$("#element").removeAttr("style");
$("#element").removeAttr("background-color") 

22
Pour supprimer une seule propriété css:var cssObject = $('selector').prop('style'); cssObject.removeProperty('background-color');
ilgaar

igaar - votre solution est la plus soignée. Je l'ai mis dans une boucle '.each' pour un tas de cellules de tableau qui avaient "display: none" qui devait disparaître mais avec d'autres propriétés qui devaient rester. Cela a fonctionné parfaitement, en supprimant simplement l'écran: aucun et en laissant le reste.
Rob Von Nesselrode

9

En utilisant simplement:

$('.tag-class').removeAttr('style');

ou

$('#tag-id').removeAttr('style');

Cela supprimera également les autres styles ajoutés en ligne, pas seulement la couleur.
LongInt

7

Que diriez-vous de quelque chose comme:

var myCss = $(element).attr('css');
myCss = myCss.replace('background-color: '+$(element).css('background-color')+';', '');
if(myCss == '') {
  $(element).removeAttr('css');
} else {
  $(element).attr('css', myCss);
}

J'aime celui la! Vous supprimez la propriété spécifiée et rien d'autre.
Joel

7

Utilisez mon plugin:

$.fn.removeCss=function(all){
        if(all===true){
            $(this).removeAttr('class');
        }
        return $(this).removeAttr('style')
    }

Pour votre cas, utilisez-le comme suit:

$(<mySelector>).removeCss();

ou

$(<mySelector>).removeCss(false);

si vous souhaitez supprimer également le CSS défini dans ses classes:

$(<mySelector>).removeCss(true);

$(this).removeAttrest redondant et this.removeAttrdevrait suffire.
Emile Bergeron

Est- removeAttr ce que supprimer aussi classattr? je ne pense pas
Abdennour TOUMI

Je parle de l' removeAttrintérieur de votre plugin, où se thistrouve déjà un élément jQuery. $(this)est redondant.
Emile Bergeron

2
Ah! OK OK .. @EmileBergeron, l'ancien jquery fournit thiscomme HTMLElementexemple l'élément mis en correspondance avec jQuery ... Comme vous le voyez, ma réponse est vieux ... c'est pourquoi .. De toute façon, je peux dire u pourquoi ils changent, ils le font en raison de la fonction flèche qui est nouvelle dans ES6. .. et thisdevient inutile et il a été remplacé parevent.currentTarget
Abdennour TOUMI

1
C'est suffisant! ;) C'est marrant comme 3 ans dans le monde JS.
Emile Bergeron

7

Essaye ça:

$('#divID').css({"background":"none"});// remove existing

$('#divID').css({"background":"#bada55"});// add new color here.

Merci


Le seul problème avec votre "supprimer l'existant" est qu'il remplacera également l'arrière-plan de la feuille de style s'il y en a un.
Jtbs

6

Si vous utilisez le style CSS, vous pouvez utiliser:

$("#element").css("background-color","none"); 

puis remplacez par:

$("#element").css("background-color", color);

Si vous n'utilisez pas le style CSS et que vous avez un attribut dans l'élément HTML, vous pouvez utiliser:

$("#element").attr("style.background-color",color);

6

2018

il y a une API native pour cela

element.style.removeProperty(propery)


2

Pourquoi ne pas faire le style que vous souhaitez supprimer une classe CSS? Maintenant , vous pouvez utiliser: .removeClass(). Cela ouvre également la possibilité d'utiliser:.toggleClass()

(supprimez la classe si elle est présente et ajoutez-la dans le cas contraire.)

Ajouter / supprimer une classe est également moins déroutant pour changer / dépanner lorsqu'il s'agit de problèmes de mise en page (par opposition à essayer de comprendre pourquoi un style particulier a disparu.)


2
let el = document.querySelector(element)
let styles = el.getAttribute('style')

el.setAttribute('style', styles.replace('width: 100%', ''))

1

C'est plus complexe que certaines autres solutions, mais peut offrir plus de flexibilité dans les scénarios:

1) Faites une définition de classe pour isoler (encapsuler) le style que vous souhaitez appliquer / supprimer de manière sélective. Il peut être vide (et dans ce cas, devrait probablement l'être):

.myColor {}

2) utilisez ce code, basé sur http://jsfiddle.net/kdp5V/167/ de cette réponse de gilly3 :

function changeCSSRule(styleSelector,property,value) {
    for (var ssIdx = 0; ssIdx < document.styleSheets.length; ssIdx++) {
        var ss = document.styleSheets[ssIdx];
        var rules = ss.cssRules || ss.rules;
        if(rules){
            for (var ruleIdx = 0; ruleIdx < rules.length; ruleIdx++) {
                var rule = rules[ruleIdx];
                if (rule.selectorText == styleSelector) {
                    if(typeof value == 'undefined' || !value){
                        rule.style.removeProperty(property);
                    } else {
                        rule.style.setProperty(property,value);
                    }
                    return; // stops at FIRST occurrence of this styleSelector
                }
            }
        }
    }
}

Exemple d'utilisation: http://jsfiddle.net/qvkwhtow/

Mises en garde:

  • Pas largement testé.
  • Ne peut pas inclure ! Important directives ou autres dans la nouvelle valeur. Toutes ces directives existantes seront perdues par cette manipulation.
  • Seules les modifications ont d'abord trouvé l'occurrence d'un styleSelector. N'ajoute ni ne supprime des styles entiers, mais cela pourrait être fait avec quelque chose de plus élaboré.
  • Toute valeur invalide / inutilisable sera ignorée ou générera une erreur.
  • Dans Chrome (au moins), les règles CSS non locales (comme intersites) ne sont pas exposées via l'objet document.styleSheets, donc cela ne fonctionnera pas sur elles. Il faudrait ajouter un remplacement local et manipuler cela, en gardant à l'esprit le comportement "premier trouvé" de ce code.
  • document.styleSheets n'est pas particulièrement convivial pour la manipulation en général, ne vous attendez pas à ce que cela fonctionne pour une utilisation agressive.

Isoler le style de cette façon est ce qu'est le CSS, même si ce n'est pas le cas. La manipulation des règles CSS n'est PAS la raison d'être de jQuery, jQuery manipule les éléments DOM et utilise des sélecteurs CSS pour le faire.


1

Le simple est bon marché dans le développement web. Je recommande d'utiliser une chaîne vide lors de la suppression d'un style particulier

$(element).style.attr = '  ';

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.