Supprimez les attributs CSS «haut» et «gauche» avec jQuery

169

Je construis une carte déplaçable qui, lorsque la carte est déplacée, donne à l'élément un attribut `` gauche '' et `` haut '' avec des valeurs pour chacun ainsi ...

<div class="map" style="top:200px; left:100px;">Map</div>

J'ai un bouton pour lequel je veux supprimer l'attribut supérieur et gauche du style en ligne sur le div lorsque vous cliquez dessus, est-ce possible avec jquery?

Liam
la source
9
Oui, ça l'est. Au moins, vous pouvez les définir sur une valeur vide, ce qui la supprime.
Felix Kling
Double possible: supprimez l'attribut CSS à l'aide de Jquery . Les réponses peuvent vous être utiles.
Drew Gaynor le
Notez que ' 'cela ne compte pas comme une valeur vide uniquement''
Peter Berg
3
Pour supprimer une seule propriété css à la fois: var cssObject =$('selector').prop('style'); cssObject.removeProperty('top'); cssObject.removeProperty('left');
ilgaar
Pour mémoire, définir sur vide ne fonctionne pas toujours: "Définir la valeur d'une propriété de style sur une chaîne vide ... Cela ne supprime cependant pas un style qui a été appliqué avec une règle CSS dans une feuille de style ou < style> élément. " - voir stackoverflow.com/questions/27791484/…
Mörre

Réponses:

139

Les valeurs par défaut pour CSS topet leftsont auto, donc leur définition peut être équivalente en fonction de ce que vous essayez de faire:

$('.map').css('top', 'auto').css('left', 'auto');

Vous avez également la possibilité de supprimer complètement l' styleattribut:

$('.map').removeAttr('style');

Cependant, si vous utilisez d'autres composants de l'interface utilisateur jQuery, ceux-ci peuvent nécessiter des styles en ligne que vous ne souhaitez pas supprimer, alors procédez avec prudence.

Rob Hruska
la source
61
généralement, ces écrasements ajoutés à l'attribut style sont destinés à changer la valeur de la valeur css par défaut; le définir sur auto ne les réinitialise pas à la valeur par défaut. ce qui signifie que l'automobile n'est pas vraiment le même alors ne pas avoir la valeur du tout. donc la bonne réponse serait $ ('map'). css ('top', '');
dsomnus
15
Cette réponse est fausse, vous ne supprimez pas les attributs mais vous les remplacez par autre chose. De plus, supprimer toute la balise de style n'a pas beaucoup de sens, on peut vouloir conserver certains attrs et en supprimer d'autres. La réponse de wtrevino est la bonne.
Alex
Ce n'est pas une option essentielle, donc l'avoir là-bas est génial! :) Pour les champs comme nom d'utilisateur
Dean Meehan
5
Pour mémoire, la réponse de @ wtrevino devrait être celle acceptée ici. Cette solution particulière a fonctionné pour moi dans certaines circonstances, mais je supprimerais cette réponse si je le pouvais. Malheureusement, comme il est accepté, il ne me laisse pas.
Rob Hruska
Ce n'est pas la bonne réponse ... La réponse @wtrevino est la plus correcte. Cette réponse ne fonctionnera que si vous souhaitez supprimer tous les styles statiques de l'élément ... dans la plupart des cas, ce n'est pas ce que vous voulez faire.
Lars
427

Si vous souhaitez supprimer spécifiquement les attributs supérieur et gauche et en laisser d'autres, vous pouvez le faire:

$('.map').css('top', '').css('left', '');

Ou, un équivalent plus court:

$('.map').css({
    'top': '',
    'left': ''
});
wtrevino
la source
64
c'est une meilleure réponse que celle choisie.
phirschybar
Oui. C'est la bonne réponse. Cela n'avait pas de sens au début, car il ressemble à ".css ('top', '')" crée simplement une règle "top" vide, mais non, il la supprime complètement.
Starkers
2
C'est la meilleure réponse à ce jour. Mais je pense que j'en ai trouvé un autre. J'en ai essayé plusieurs. .css('left', undefined);n'a rien changé. Passer null n'a rien fait non plus. Mais .css('left', false);supprime cette propriété.
Viktor
Comme d'autres l'ont suggéré, cela devrait être considéré comme la bonne réponse.
1
@Viktor Notez que la documentation dit explicitement d'utiliser une chaîne vide. Je me demande si le faux fonctionne à cause d'une contrainte de type non documentée qui pourrait disparaître à l'avenir? api.jquery.com/css
Jeremy Wadhams
37

Vous pouvez supprimer tout le contenu de l' styleattribut en procédant comme suit:

$('.map').removeAttr('style');

Et vous pouvez supprimer des styles spécifiques en faisant:

$('.map').css('top', '');
$('.map').css('left', '');
Anish Gupta
la source
30

Définissez simplement la propriété CSS avec une chaîne vide, par exemple avec le code suivant:

$('#mydiv').css('color', '');

Voir la documentation jQuery sur CSS .

khotyn
la source
3
Je ne sais pas pourquoi ce n'est pas la réponse acceptée. La réponse réellement acceptée est hacky car elle ne supprime pas réellement la propriété CSS de l'objet, qui est le titre de la question.
Paul Go
6
  1. Allez ici: API jQuery
  2. Ctrl + F pour «supprimer»
  3. Lis:

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é appliquée directement, que ce soit dans le style HTML attribut, via la méthode .css () de jQuery, ou via la manipulation DOM directe de la propriété style.

La documentation vous donne l'approche actuelle et recommandée pour ce que vous essayez d'accomplir, ce qui peut souvent vous faire gagner du temps car vous n'avez pas à lire les guerres de flamme en cas de débordement de pile (peu importe à quel point cela peut être amusant / instructif. !).

Jacob McKay
la source
5

Selon ce rapport de bogue JQuery

element.removeAttr ('style')
ne fonctionne pas de manière cohérente dans les navigateurs basés sur Webkit. Par exemple, j'ai rencontré ce problème sur iOS 6.1. Le correctif consiste à utiliser:
element.attr ('style', '')

gnmerritt
la source
2

Si vous souhaitez tout supprimer, vous pouvez le faire

$('.map').removeAttr('style');
romo
la source
2
$.fn.removeCss=function(prop){
   if(!prop){
          return $(this).removeAttr('style').removeAttr('class');
     }
    else{
         return $(this).css(prop,null);
    }

}

puis si vous souhaitez supprimer le (s) accessoire (s) css:

    $('#mydiv').removeCss('color');
//To remove all prop Css
    $('#mydiv').removeCss();
Abdennour TOUMI
la source
1

À mon avis, le moyen le plus propre est de supprimer complètement la propriété de la déclaration CSSStyleDeclaration de l'élément , au lieu de simplement l'écraser avec une sorte de valeur nulle / zéro / par défaut:

$(".foo").prop("style").removeProperty("top");
$(".foo").prop("style").removeProperty("left");
$(".foo").prop("style").removeProperty("background-color");
Martin
la source
0
$.fn.removeCss=function(toDelete){

    var props=$(this).attr('style').split(';');
var tmp=-1;
for( var p=0;p<props.length; p++){if(props[p].indexOf(toDelete)!==-1){tmp=p}};
if(tmp!==-1){

   delete props[tmp];
}

  return $(this).attr('style',props.join(';')+';');

}

Supprimez en toute sécurité avec ce plugin!

$ ('myDiv'). removeCss ('couleur');

Abdennour TOUMI
la source
0

Certains styles ne peuvent pas être facilement supprimés (le débordement vient à l'esprit)

Une solution de contournement serait de créer 2 classes différentes et d'ajouter / supprimer celle contenant le style souhaité.

PAS la meilleure solution pour les propriétés de style qui peuvent être facilement supprimées / désactivées.

Petre Dan
la source
0

Pour supprimer les styles CSS, attribuez une chaîne vide au style

dans ce cas

$('.map').css({top:'',left:''});
faboulaws
la source
-1
 $("#map").css("top", "0"); 
 $("#map").css("left", "0"); 
Dit Erraoudy
la source
cela le met à 0, ne supprime pas la propriété
Martin Massera