Remova os atributos CSS "top" e "left" com o jQuery

169

Estou construindo um mapa arrastável que, quando o mapa é arrastado, o elemento recebe um atributo 'left' e 'top' com valores para cada um ...

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

Eu tenho um botão no qual desejo remover o atributo superior e esquerdo do estilo embutido na div quando clicado. Isso é possível com o jquery?

Liam
fonte
9
Sim, ele é. Pelo menos você pode configurá-los para um valor vazio, o que o remove.
Felix Kling
Possível duplicado: Remova o atributo CSS usando o Jquery . As respostas podem ser úteis para você.
Desenhou Gaynor
Note-se que ' 'não conta apenas como um valor vazio''
Peter Berg
3
Para remover apenas uma propriedade css de cada vez: var cssObject =$('selector').prop('style'); cssObject.removeProperty('top'); cssObject.removeProperty('left');
ilgaar
Apenas para o registro, definir como vazio nem sempre funciona: "Definir o valor de uma propriedade de estilo como uma sequência vazia ... No entanto, não remove um estilo que foi aplicado com uma regra CSS em uma folha de estilo ou < estilo> elemento ". - stackoverflow.com/questions/27791484/…
Mar

Respostas:

139

Os valores padrão para CSS tope leftsão auto, portanto, defini-los para isso pode ser equivalente, dependendo do que você está tentando fazer:

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

Você também tem a opção de remover completamente o styleatributo:

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

No entanto, se você estiver usando outros componentes da interface do usuário do jQuery, eles podem exigir estilos em linha que você não deseja remover, portanto, continue com cuidado.

Rob Hruska
fonte
61
geralmente essas substituições adicionadas ao atributo style destinam-se a alterar o valor do valor padrão do css; defini-lo como automático não os redefine para o valor padrão. ou seja, auto não é realmente o mesmo e não possui o valor. a resposta correta seria $ ('map'). css ('top', '');
Dsomnus 03/04
15
Esta resposta está errada, você não está removendo atributos, mas os substituindo por outra coisa. Além disso, remover toda a tag de estilo não faz muito sentido; talvez você queira manter alguns atributos e remover outros. A resposta do wtrevino é a correta.
18713 Alex
Não é uma opção essencial, por isso é ótimo! :) Para campos como nome de usuário
Dean Meehan 10/14
5
Para constar, a resposta de @ wtrevino deve ser a aceita aqui. Essa solução em particular funcionou para mim em algumas circunstâncias, mas eu removeria essa resposta se pudesse. Infelizmente, uma vez que é aceito, não vai me deixar.
Rob Hruska
Esta não é a resposta correta ... a resposta @wtrevino é a mais correta. Esta resposta funcionará apenas se você desejar remover todos os estilos estáticos do elemento ... na maioria dos casos, não é isso que você deseja fazer.
Lars
427

Se você deseja remover especificamente os atributos superior e esquerdo e deixar outros, faça o seguinte:

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

Ou, um equivalente mais curto:

$('.map').css({
    'top': '',
    'left': ''
});
wtrevino
fonte
64
esta é uma resposta melhor que a selecionada.
phirschybar
Sim. Esta é a resposta correta. Não fez sentido a princípio, porque parece ".css ('top', '')" simplesmente cria uma regra 'top' vazia, mas não, remove-a completamente.
Starkers
2
Esta é a melhor resposta ainda. Mas acho que encontrei outro. Eu tentei alguns diferentes. .css('left', undefined);não mudou nada. Passar null também não fez nada. Mas .css('left', false);remove essa propriedade.
Viktor
Como outros sugeriram, essas devem ser consideradas as respostas corretas.
1
@ Viktor Observe que a documentação diz explicitamente para usar uma string vazia. Gostaria de saber se falso funciona por causa de alguma coerção de tipo não documentada que pode desaparecer no futuro? api.jquery.com/css
Jeremy Wadhams
37

Você pode remover todo o conteúdo do styleatributo fazendo:

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

E você pode remover styles específicos fazendo:

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

Basta definir a propriedade CSS com uma sequência vazia, por exemplo, com o seguinte código:

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

Veja a documentação do jQuery em CSS .

khotyn
fonte
3
Não sei por que essa não é a resposta aceita. A resposta realmente aceita é hacky porque na verdade não remove a propriedade CSS do objeto, que é o título da pergunta.
Paul Go
6
  1. Acesse aqui: API jQuery
  2. Ctrl + F para 'remover'
  3. Ler:

Definir o valor de uma propriedade de estilo como uma sequência vazia - por exemplo, $ ("#mydiv") .css ("color", "") - remove essa propriedade de um elemento se já tiver sido aplicada diretamente, seja no estilo HTML atributo, pelo método .css () do jQuery ou pela manipulação direta do DOM da propriedade style.

Os documentos fornecem a abordagem atual e recomendada para o que você está tentando realizar, o que geralmente poupa tempo, porque você não precisa ler e avançar guerras de chamas em excesso de pilha (não importa o quão divertido / esclarecedor possa ser !).

Jacob McKay
fonte
5

Por este relatório de bug do JQuery

element.removeAttr ('style')
não funciona consistentemente em navegadores baseados no Webkit. Por exemplo, deparei-me com este problema no iOS 6.1. A correção é usar:
element.attr ('estilo', '')

gnmerritt
fonte
2

Se você deseja remover tudo isso, você pode fazer

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

}

se você deseja remover o (s) suporte (s) css:

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

Na minha opinião, a maneira mais limpa é remover a propriedade completamente do CSSStyleDeclaration do elemento , em vez de substituí-la por algum tipo de valor nulo / zero / padrão:

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

}

Exclua com segurança com este plugin!

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

Abdennour TOUMI
fonte
0

Existem alguns estilos que não podem ser facilmente removidos.

Uma solução alternativa seria criar 2 classes diferentes e adicionar / remover a que contém o estilo desejado.

NÃO é a melhor solução para propriedades de estilo que podem ser facilmente removidas / desabilitadas.

Petre Dan
fonte
0

Para remover estilos css, atribua uma string vazia ao estilo

nesse caso

$('.map').css({top:'',left:''});
faboulaws
fonte
-1
 $("#map").css("top", "0"); 
 $("#map").css("left", "0"); 
Said Erraoudy
fonte
isto define-o como 0, não remove a propriedade
Martin Massera