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?


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.


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

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

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 .


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


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


2

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

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

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

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

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


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ć.


0

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

w tym przypadku

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.