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?


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.


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': ''
});

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', '');

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 .


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. !).


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', '')


2

Si vous souhaitez tout supprimer, vous pouvez le faire

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

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();

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");

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');


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.


0

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

dans ce cas

$('.map').css({top:'',left:''});

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.