Usuń atrybuty CSS „top” i „left” za pomocą jQuery

169

Tworzę mapę, którą można przeciągać, a gdy mapa jest przeciągana, elementowi nadawane są atrybuty „left” i „top” z wartościami dla każdego z nich ...

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

Mam przycisk, który po kliknięciu chce usunąć atrybut górny i lewy ze stylu wbudowanego elementu div. Czy jest to możliwe w przypadku jquery?

Liam
źródło
9
Tak to jest. Przynajmniej możesz ustawić je na pustą wartość, co ją usuwa.
Felix Kling
Możliwy duplikat: usuń atrybut CSS za pomocą Jquery . Znajdujące się tam odpowiedzi mogą być pomocne.
Drew Gaynor
Zauważ, że ' 'nie liczy się to tylko jako pusta wartość''
Peter Berg,
3
Aby usunąć tylko jedną właściwość css naraz: var cssObject =$('selector').prop('style'); cssObject.removeProperty('top'); cssObject.removeProperty('left');
ilgaar
Tylko dla rekordu, ustawienie na pusty nie zawsze działa: „Ustawienie wartości właściwości stylu na pusty ciąg… Nie usuwa jednak stylu, który został zastosowany za pomocą reguły CSS w arkuszu stylów lub < styl> element ”. - patrz stackoverflow.com/questions/27791484/…
Mörre

Odpowiedzi:

139

Domyślne wartości dla CSS topi leftto auto, więc ustawienie ich na takie może być równoważne w zależności od tego, co próbujesz zrobić:

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

Masz również możliwość całkowitego usunięcia styleatrybutu:

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

Jeśli jednak używasz innych składników interfejsu użytkownika jQuery, mogą one wymagać stylów wbudowanych, których nie chcesz usuwać, więc postępuj ostrożnie.

Rob Hruska
źródło
61
zwykle takie nadpisania dodane do atrybutu style służą do zmiany wartości off z domyślnej wartości css; ustawienie go na auto nie resetuje ich do wartości domyślnych. co oznacza, że ​​auto nie jest naprawdę tym samym, a następnie nie ma żadnej wartości. więc poprawna odpowiedź to $ ('map'). css ('top', '');
dsomnus
15
Ta odpowiedź jest błędna, nie usuwasz atrybutów, ale zastępujesz je czymś innym. Również usunięcie całego tagu stylu nie ma większego sensu, ktoś może chcieć zachować niektóre atrybuty, a usunąć inne. Odpowiedź wtrevino jest poprawna.
Alex
Nie jest to niezbędna opcja, więc posiadanie jej jest świetne! :) Dla pól takich jak nazwa użytkownika
Dean Meehan
5
Dla przypomnienia, odpowiedź @ wtrevino powinna być tutaj akceptowana. To konkretne rozwiązanie zadziałało w pewnych okolicznościach, ale usunąłbym tę odpowiedź, gdybym mógł. Niestety, skoro został zaakceptowany, nie pozwala mi.
Rob Hruska,
To nie jest poprawna odpowiedź ... Odpowiedź @wtrevino jest najbardziej poprawna. Ta odpowiedź zadziała tylko wtedy, gdy chcesz usunąć wszystkie statyczne style z elementu ... w większości przypadków to nie jest to, co chcesz zrobić.
Lars
427

Jeśli chcesz konkretnie usunąć atrybuty górny i lewy oraz pozostawić inne, możesz to zrobić:

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

Lub krótszy odpowiednik:

$('.map').css({
    'top': '',
    'left': ''
});
wtrevino
źródło
64
to jest lepsza odpowiedź niż wybrana.
phirschybar
Tak. To jest właściwa odpowiedź. Na początku nie miało to sensu, ponieważ wygląda na to, że „.css ('top', '')” po prostu tworzy pustą regułę „top”, ale nie, usuwa ją całkowicie.
Starkers
2
To najlepsza jak dotąd odpowiedź. Ale myślę, że znalazłem inny. Wypróbowałem kilka różnych. .css('left', undefined);nic nie zmieniło. Podanie wartości null też nic nie dało. Ale .css('left', false);usuwa tę własność.
Viktor
Jak sugerowali inni, należy to uznać za prawidłowe odpowiedzi.
1
@Viktor Zauważ, że dokumentacja wyraźnie mówi o używaniu pustego ciągu. Zastanawiam się, czy zdarza się, że fałsz zadziała z powodu jakiegoś nieudokumentowanego przymusu typu, który może zniknąć w przyszłości? api.jquery.com/css
Jeremy Wadhams
37

Możesz usunąć całą zawartość styleatrybutu, wykonując:

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

Możesz usunąć określone styleadresy, wykonując:

$('.map').css('top', '');
$('.map').css('left', '');
Anish Gupta
źródło
30

Po prostu ustaw właściwość CSS na pusty ciąg, na przykład za pomocą następującego kodu:

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

Zobacz dokumentację jQuery w CSS .

chocim
źródło
3
Nie wiem, dlaczego nie jest to akceptowana odpowiedź. Rzeczywista zaakceptowana odpowiedź jest zepsuta, ponieważ w rzeczywistości nie usuwa właściwości CSS z obiektu, czyli tytułu pytania.
Paul Go
6
  1. Przejdź tutaj: jQuery API
  2. Ctrl + F dla „usuń”
  3. Czytać:

Ustawienie wartości właściwości stylu na pusty ciąg - np. $ ("#Mydiv") .css ("color", "") - usuwa tę właściwość z elementu, jeśli została już bezpośrednio zastosowana, czy to w stylu HTML atrybut, poprzez metodę .css () jQuery lub poprzez bezpośrednią manipulację DOM właściwości style.

Dokumenty przedstawiają aktualne, zalecane podejście do tego, co próbujesz osiągnąć, co często może zaoszczędzić czas, ponieważ nie musisz czytać tam iz powrotem wojen płomieni na przepełnieniu stosu (bez względu na to, jak zabawne / pouczające może być !).

Jacob McKay
źródło
5

Zgodnie z tym raportem o błędzie JQuery

element.removeAttr ('style')
nie działa konsekwentnie w przeglądarkach opartych na Webkit. Na przykład napotkałem ten problem na iOS 6.1. Poprawka polega na użyciu:
element.attr ('style', '')

gnmerritt
źródło
2

Jeśli chcesz usunąć to wszystko, możesz to zrobić

$('.map').removeAttr('style');
romo
źródło
2
$.fn.removeCss=function(prop){
   if(!prop){
          return $(this).removeAttr('style').removeAttr('class');
     }
    else{
         return $(this).css(prop,null);
    }

}

następnie jeśli chcesz usunąć właściwości CSS:

    $('#mydiv').removeCss('color');
//To remove all prop Css
    $('#mydiv').removeCss();
Abdennour TOUMI
źródło
1

Moim zdaniem najczystszym sposobem jest całkowite usunięcie właściwości z CSSStyleDeclaration elementu , zamiast zwykłego nadpisywania jej jakąś wartością null / zero / domyślną:

$(".foo").prop("style").removeProperty("top");
$(".foo").prop("style").removeProperty("left");
$(".foo").prop("style").removeProperty("background-color");
Jaskółka oknówka
źródło
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(';')+';');

}

Usuń bezpiecznie za pomocą tej wtyczki!

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

Abdennour TOUMI
źródło
0

Istnieją style, których nie można łatwo usunąć. (Przychodzi na myśl przepełnienie)

Rozwiązaniem byłoby utworzenie 2 różnych klas i dodanie / usunięcie tej zawierającej żądany styl.

NIE jest najlepszym rozwiązaniem dla właściwości stylu, które można łatwo usunąć / wyłączyć.

Petre Dan
źródło
0

Aby usunąć style CSS, przypisz do stylu pusty ciąg

w tym przypadku

$('.map').css({top:'',left:''});
faboulaws
źródło
-1
 $("#map").css("top", "0"); 
 $("#map").css("left", "0"); 
Said Erraoudy
źródło
ustawia to na 0, nie usuwa właściwości
Martin Massera