Entfernen Sie die CSS-Attribute "top" und "left" mit jQuery

169

Ich baue eine ziehbare Karte, bei der das Element beim Ziehen der Karte ein Attribut 'left' und 'top' mit Werten für jede erhält ...

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

Ich habe eine Schaltfläche, mit der ich das obere und linke Attribut aus dem Inline-Stil auf dem div entfernen möchte, wenn ich darauf klicke. Ist dies mit jquery möglich?

Liam
quelle
9
Ja, so ist es. Zumindest können Sie sie auf einen leeren Wert setzen, wodurch dieser entfernt wird.
Felix Kling
Mögliches Duplikat: Entfernen Sie das CSS-Attribut mit Jquery . Die Antworten dort können für Sie hilfreich sein.
Drew Gaynor
Beachten Sie, dass ' 'dies nicht nur als leerer Wert gilt''
Peter Berg
3
So entfernen Sie jeweils nur eine CSS-Eigenschaft: var cssObject =$('selector').prop('style'); cssObject.removeProperty('top'); cssObject.removeProperty('left');
ilgaar
Nur für den Datensatz funktioniert das Setzen auf leer nicht immer: "Festlegen des Werts einer Stileigenschaft auf eine leere Zeichenfolge ... Es wird jedoch kein Stil entfernt, der mit einer CSS-Regel in einem Stylesheet oder <angewendet wurde Stil> Element. " - siehe stackoverflow.com/questions/27791484/…
Mörre

Antworten:

139

Die Standardwerte für CSS topund leftsind. autoJe nachdem, was Sie tun möchten, sind sie möglicherweise gleichwertig.

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

Sie haben auch die Möglichkeit, das styleAttribut vollständig zu entfernen :

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

Wenn Sie jedoch andere jQuery-UI-Komponenten verwenden, sind möglicherweise Inline-Stile erforderlich, die nicht entfernt werden sollen. Gehen Sie daher dort vorsichtig vor.

Rob Hruska
quelle
61
Normalerweise dienen solche Überschreibungen, die dem Stilattribut hinzugefügt werden, dazu, den Wert vom Standard-CSS-Wert zu ändern. Wenn Sie es auf Auto setzen, werden sie nicht auf den Standardwert zurückgesetzt. Das heißt, Auto ist nicht wirklich dasselbe, dann hat es überhaupt keinen Wert. Die richtige Antwort wäre also $ ('map'). css ('top', '');
Dsomnus
15
Diese Antwort ist falsch. Sie entfernen keine Attribute, sondern ersetzen sie durch etwas anderes. Außerdem macht das Entfernen des gesamten Style-Tags wenig Sinn. Möglicherweise möchten Sie einige Attribute beibehalten und andere entfernen. Die Antwort von wtrevino ist die richtige.
Alex
Es ist keine wesentliche Option, also ist es großartig, es dort zu haben! :) Für Felder wie Benutzername
Dean Meehan
5
Für die Aufzeichnung sollte die Antwort von @ wtrevino die hier akzeptierte sein. Diese spezielle Lösung hat unter bestimmten Umständen für mich funktioniert, aber ich würde diese Antwort entfernen, wenn ich könnte. Da es akzeptiert wird, lässt es mich leider nicht.
Rob Hruska
Dies ist nicht die richtige Antwort ... @wtrevino Antwort ist die richtigste. Diese Antwort funktioniert nur, wenn Sie alle statischen Stile aus dem Element entfernen möchten. In den meisten Fällen ist dies nicht das, was Sie tun möchten.
Lars
427

Wenn Sie die oberen und linken Attribute gezielt entfernen und andere verlassen möchten, können Sie dies tun:

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

Oder ein kürzeres Äquivalent:

$('.map').css({
    'top': '',
    'left': ''
});
wtrevino
quelle
64
Dies ist eine bessere Antwort als die ausgewählte.
Phirschybar
Ja. Dies ist die richtige Antwort. Hat zunächst keinen Sinn ergeben, da es so aussieht, als würde ".css ('top', '')" einfach eine leere 'top'-Regel erstellen, aber nein, sie wird vollständig entfernt.
Starkers
2
Dies ist die bisher beste Antwort. Aber ich glaube ich habe einen anderen gefunden. Ich habe ein paar verschiedene ausprobiert. .css('left', undefined);hat nichts geändert. Das Übergeben von null hat auch nichts bewirkt. Aber .css('left', false);entfernt diese Eigenschaft.
Viktor
Wie andere vorgeschlagen haben, sollte dies als die richtige Antwort angesehen werden.
1
@Viktor Beachten Sie, dass in der Dokumentation ausdrücklich die Verwendung einer leeren Zeichenfolge angegeben ist. Ich frage mich, ob Falsches aufgrund eines undokumentierten Zwangs funktioniert, der in Zukunft verschwinden könnte. api.jquery.com/css
Jeremy Wadhams
37

Sie können den gesamten Inhalt des styleAttributs entfernen , indem Sie Folgendes tun:

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

Und Sie können bestimmte styles entfernen, indem Sie Folgendes tun:

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

Setzen Sie einfach die CSS-Eigenschaft mit einer leeren Zeichenfolge, beispielsweise mit dem folgenden Code:

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

Siehe jQuery-Dokumentation zu CSS .

khotyn
quelle
3
Ich bin mir nicht sicher, warum dies nicht die akzeptierte Antwort ist. Die tatsächlich akzeptierte Antwort ist hackig, da die CSS-Eigenschaft, die der Titel der Frage ist, nicht tatsächlich aus dem Objekt entfernt wird.
Paul Go
6
  1. Gehen Sie hier: jQuery API
  2. Strg + F für 'Entfernen'
  3. Lesen:

Durch Festlegen des Werts einer Stileigenschaft auf eine leere Zeichenfolge - z. B. $ ("#mydiv") .css ("color", "") - wird diese Eigenschaft aus einem Element entfernt, wenn sie bereits direkt angewendet wurde, sei es im HTML-Stil Attribut, über die .css () -Methode von jQuery oder durch direkte DOM-Manipulation der Stileigenschaft.

Die Dokumente geben Ihnen den aktuellen, empfohlenen Ansatz für das, was Sie erreichen möchten. Dies kann Ihnen oft Zeit sparen, da Sie keine Flammenkriege beim Stapelüberlauf vorlesen müssen (egal wie lustig / aufschlussreich das sein mag !).

Jacob McKay
quelle
5

Gemäß diesem JQuery-Fehlerbericht

element.removeAttr ('style')
funktioniert in Webkit-basierten Browsern nicht konsistent. Zum Beispiel bin ich auf dieses Problem unter iOS 6.1 gestoßen. Das Update ist zu verwenden:
element.attr ('style', '')

gnmerritt
quelle
2

Wenn Sie alles entfernen möchten, können Sie dies tun

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

}

dann, wenn Sie CSS-Requisiten entfernen möchten:

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

Meiner Meinung nach besteht der sauberste Weg darin, die Eigenschaft vollständig aus der CSSStyleDeclaration des Elements zu entfernen , anstatt sie nur mit einer Art Null / Null / Standardwert zu überschreiben:

$(".foo").prop("style").removeProperty("top");
$(".foo").prop("style").removeProperty("left");
$(".foo").prop("style").removeProperty("background-color");
Martin
quelle
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(';')+';');

}

Mit diesem Plugin sicher löschen!

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

Abdennour TOUMI
quelle
0

Es gibt einige Stile, die nicht einfach entfernt werden können (Überlauf fällt mir ein)

Eine Problemumgehung besteht darin, zwei verschiedene Klassen zu erstellen und die Klasse hinzuzufügen / zu entfernen, die den gewünschten Stil enthält.

NICHT die beste Lösung für Stileigenschaften, die leicht entfernt / deaktiviert werden können.

Petre Dan
quelle
0

Um CSS-Stile zu entfernen, weisen Sie dem Stil eine leere Zeichenfolge zu

in diesem Fall

$('.map').css({top:'',left:''});
Faboulaws
quelle
-1
 $("#map").css("top", "0"); 
 $("#map").css("left", "0"); 
Sagte Erraoudy
quelle
dies setzt es auf 0, entfernt nicht die Eigenschaft
Martin Massera