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?


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.


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

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

30

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

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

Siehe jQuery-Dokumentation zu CSS .


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


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


2

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

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

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

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

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


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.


0

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

in diesem Fall

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.