Supprimer le CSS d'une Div en utilisant JQuery


169

Je suis nouveau sur JQuery. Dans mon application, j'ai les éléments suivants:

$("#displayPanel div").live("click", function(){
  $(this).css({'background-color' : 'pink', 'font-weight' : 'bolder'});
});

Lorsque je clique sur une Div, la couleur de cette Div est modifiée. Dans cette fonction Click, j'ai quelques fonctionnalités à faire. Après tout cela, je veux supprimer le Css appliqué de la Div. Comment pourrais-je le faire dans JQuery?


garçon, tu as ouvert une boîte de vers!
Pincement du

Réponses:


163

Mettez vos propriétés CSS dans une classe, puis faites quelque chose comme ceci:

$("#displayPanel div").live("click", function(){
   $(this).addClass('someClass');
});

Ensuite, où se trouvent vos `` autres fonctionnalités '', faites quelque chose comme:

$("#myButton").click(function(){
   $("#displayPanel div").removeClass('someClass');
});

3
@Aruna: J'ai un peu peur maintenant - comment mettez - vous le style sur l'élément? Si votre CSS n'est pas dans une feuille de style / bloc, ce n'est pas du CSS.
annakata

8
@annakata: Bien sûr que c'est ... <div style="xxx"/>c'est toujours du CSS ... ce n'est pas une très bonne façon de le faire, mais ça marche.
mpen

127
Cette réponse n'aide pas tous les cas où vous modifiez quelque chose à la volée pour faire une animation ou un rendu complexe. La question n'était pas de savoir comment organiser le CSS, mais comment supprimer une option CSS.
FMaz008

5
@ FMaz008 - L'animation et le rendu complexe vont au-delà de ce qu'il a demandé. Lisez la question: "... Après tout cela, je veux supprimer le Css appliqué de la Div". Il pourrait donc utiliser addClassou removeClassou removeAttr('style')comme dans la réponse de @ ToRrEs.
karim79

1
Bien que ci-dessous ait fonctionné pour moi aussi, je pense que c'était la meilleure solution car je préfère faire TOUS les styles ou au moins autant que possible dans mes feuilles de style. J'ai fini par faire les choses de cette façon.
LondonGuy

307

Vous pouvez supprimer des css spécifiques qui se trouvent sur l'élément comme ceci:

$(this).css({'background-color' : '', 'font-weight' : ''});

Bien que je sois d'accord avec Karim, vous devriez probablement utiliser des classes CSS.


Cela supprimerait les paramètres précédents pour background-color et font-weight
Philippe Leybaert

@Dave a parfaitement fonctionné dans IE7 pour que je supprime les styles directement appliqués en ligne à l'élément , pas pour supprimer les styles appliqués via les classes css.
ErikE le

Le problème est que lorsque vous définissez l'arrière-plan sur «», IE7 ajoute volontiers des valeurs par défaut pour toutes les différentes propriétés background- *. Ce qui signifie que si vous avez défini la propriété background- * autrement (à travers les classes, par exemple), elles sont effacées par cela. J'ai dû faire face à ce problème spécifique dans notre produit.
Dave Van den Eynde le

Cela fonctionne bien pour moi même si j'ai fini par utiliser addClass car le style devrait être fait dans les feuilles de style. J'aime personnellement garder les choses organisées.
LondonGuy

Notez que ce n'est PAS la même chose que $ element.css ('top', '') ;, qui ne supprime pas le style. Vous devez passer un objet: $ element.css ({'top:' '});
Tom McKenzie

223

Vous pouvez utiliser la méthode removeAttr, si vous souhaitez supprimer tout le style en ligne que vous avez ajouté manuellement avec javascript. Il vaut mieux utiliser des classes CSS mais on ne sait jamais.

$("#displayPanel div").removeAttr("style")


18
C'est une meilleure solution que d'utiliser une classe supplémentaire, +1.
o15a3d4l11s2

6
Bonne réponse - la .css('style-name', 'style-value')fonction de jQuery ajoute des styles en ligne à un élément - et est essentielle pour mettre à jour les styles à la volée. Un script glisser / déposer peut modifier les styles topet leftd'un élément positionné de manière absolue - une instance où l'utilisation de classes n'est pas pratique.
leepowers

C'est mieux que les autres options car il suffit de supprimer le style.
gautamlakum

4
Juste pour ajouter que chrome ne gérera pas cela correctement, comme on le voit ici, une option plus sûre consisterait à utiliser `attr ('style', '').
Andrew

Très bonne réponse. Tant que vous êtes sûr de n'avoir que le CSS en ligne que vous souhaitez supprimer une fois que cela est exécuté (comme c'est souvent le cas pour les animations), alors c'est la voie à suivre.
Jacob Stamm

40

Vous pouvez supprimer les propriétés en ligne de cette façon:

$(selector).css({'property':'', 'property':''});

Par exemple:

$(actpar).css({'top':'', 'opacity':''});

Ceci est essentiellement mentionné ci-dessus, et cela fait définitivement l'affaire.

BTW, cela est utile dans les cas tels que lorsque vous devez effacer un état après l'animation. Bien sûr, je pourrais écrire une demi-douzaine de classes pour gérer cela, ou je pourrais utiliser ma classe de base et #id pour faire des maths, et effacer le style en ligne appliqué par l'animation.

$(actpar).animate({top:0, opacity:1, duration:500}, function() {
   $(this).css({'top':'', 'opacity':''});
});

juste quelque chose que je cherchais, supprime les styles en ligne .. merci
Naveen

12
jQuery.fn.extend
({
    removeCss: function(cssName) {
        return this.each(function() {
            var curDom = $(this);
            jQuery.grep(cssName.split(","),
                    function(cssToBeRemoved) {
                        curDom.css(cssToBeRemoved, '');
                    });
            return curDom;
        });
    }
});

/*example code: I prefer JQuery extend so I can use it anywhere I want to use.

$('#searchJqueryObject').removeCss('background-color');
$('#searchJqueryObject').removeCss('background-color,height,width'); //supports comma separated css names.

*/

OU

//this parse style & remove style & rebuild style. I like the first one.. but anyway exploring..
jQuery.fn.extend
({
    removeCSS: function(cssName) {
        return this.each(function() {

            return $(this).attr('style',

            jQuery.grep($(this).attr('style').split(";"),
                    function(curCssName) {
                        if (curCssName.toUpperCase().indexOf(cssName.toUpperCase() + ':') <= 0)
                            return curCssName;
                    }).join(";"));
        });
    }
});

Existe-t-il un moyen de supprimer toutes les propriétés css avec cela?
Simon Arnold

J'ai essayé le premier et ça marche à merveille! Pour tous les débutants qui n'auraient peut-être pas su: css ('attr', '') n'est pas la même chose que supprimer cet attr!
Anonyme

7

À noter, en fonction de la propriété, vous pourrez peut-être le définir sur auto.


5

Définissez la valeur par défaut, par exemple:

$ (this) .css ("hauteur", "auto");

ou dans le cas d'autres fonctionnalités CSS

$ (this) .css ("hauteur", "hériter");


5

En fait, le meilleur moyen que j'ai trouvé pour le faire lorsque vous devez faire un style complexe basé sur jquery, par exemple, si vous avez un modal que vous devez afficher mais qu'il doit calculer les décalages de page pour obtenir les paramètres corrects dans lesquels ils devront entrer la fonction a jQuery ("x"). css ({}).

Voici donc le réglage des styles, la sortie des variables calculées en fonction de divers facteurs.

$(".modal").css({ border: "1px solid #ccc", padding: "3rem", position: "absolute", zIndex: 999, background: "#fff", top: "30", visibility: "visible"})

Afin d'effacer ces styles. plutôt que de définir quelque chose comme

$(".modal").css({ border: "", padding: "", position: "", zIndex: 0, background: "", top: "", visibility: ""})

La manière simple serait

$(".modal").attr("style", "")

Lorsque jquery manipule des éléments sur le dom, les styles sont écrits sur l'élément dans l'attribut "style" comme si vous écriviez les styles en ligne. Tout ce que vous avez à faire est d'effacer cet attribut et l'élément doit revenir à ses styles d'origine

J'espère que cela t'aides


4

j'ai le même problème aussi, supprimez simplement la valeur

<script>
      $("#play").toggle(function(){$(this).css("background","url(player.png) -100px 0px no-repeat");},
      function(){$(this).css("background","");});
</script>

2

Si vous ne voulez pas utiliser de classes (ce que vous devriez vraiment), la seule façon d'accomplir ce que vous voulez est d'enregistrer d'abord les styles modifiés:

var oldFontSize = $(this).css("font-size");
var oldBackgroundColor = $(this).css("background-color");

// set style
// do your thing

$(this).css("font-size",oldFontSize);
// etc...

2

J'ai utilisé la deuxième solution de user147767

Cependant, il y a une faute de frappe ici. Ça devrait être

curCssName.toUpperCase (). indexOf (cssName.toUpperCase () + ':') <0

pas <= 0

J'ai également changé cette condition pour:

! curCssName.match (nouveau RegExp (cssName + "(-. +) ?:"), "mi")

comme parfois nous ajoutons une propriété css sur jQuery, et elle est ajoutée d'une manière différente pour différents navigateurs (c'est-à-dire que la propriété border sera ajoutée en tant que "border" pour Firefox, et "border-top", "border-bottom" etc pour IE ).


1

Avant d'ajouter une classe, vous devez vérifier si elle avait déjà une classe avec la méthode .hasClass ()

Pour votre question spécifique. Vous devriez mettre vos affaires dans la feuille de style en cascade. Il est recommandé de séparer la conception et la fonctionnalité.

la solution proposée pour ajouter et supprimer des noms de classe est donc la meilleure pratique.

cependant, lorsque vous manipulez des éléments, vous ne contrôlez pas la façon dont ils sont rendus. removeAttr ('style') est le MEILLEUR moyen de supprimer tous les styles en ligne.


1

J'ai un peu modifié la solution de user147767 pour rendre possible l'utilisation strings, arrayset objectsen entrée:

/*!
 * jquery.removecss.js v0.2 - https://stackoverflow.com/a/17196154/1250044
 * Remove multiple properties from an element in your DOM.
 *
 * @author Yannick Albert | #yckart
 * @param {Array|Object|String} css
 *
 * Copyright (c) 2013 Yannick Albert (http://yckart.com)
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php).
 * 2013/06/19
 **/

$.fn.removeCss = function (css) {
    var properties = [];
    var is = $.type(css);

    if (is === 'array') properties = css;
    if (is === 'object') for (var rule in css) properties.push(rule);
    if (is === 'string') properties = css.replace(/,$/, '').split(',');

    return this.each(function () {
        var $this = $(this);
        $.map(properties, function (prop) {
            $this.css(prop, '');
        });
    });
};

// set some styling
$('body').css({
    color: 'white',
    border: '1px solid red',
    background: 'red'
});

// remove it again
$('body').removeCss('background');
$('body').removeCss(['border']);
$('body').removeCss({
    color: 'white'
});

http://jsfiddle.net/ARTsinn/88mJF/

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.