Elimine los atributos CSS "superior" e "izquierdo" con jQuery

169

Estoy construyendo un mapa arrastrable que cuando se arrastra el mapa se le da al elemento un atributo 'izquierda' y 'superior' con valores para cada uno como tal ...

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

Cuando hago clic en un botón, deseo eliminar el atributo superior e izquierdo del estilo en línea en el div. ¿Es esto posible con jquery?

Liam
fuente
9
Sí lo es. Al menos puede establecerlos en un valor vacío, lo que lo elimina.
Felix Kling
Posible duplicado: eliminar el atributo CSS con Jquery . Las respuestas allí pueden ser útiles para usted.
Drew Gaynor
Tenga en cuenta que ' 'no cuenta solo como un valor vacío''
Peter Berg
3
Para eliminar solo una propiedad css a la vez: var cssObject =$('selector').prop('style'); cssObject.removeProperty('top'); cssObject.removeProperty('left');
ilgaar
Solo para el registro, la configuración de vacío no siempre funciona: "Establecer el valor de una propiedad de estilo en una cadena vacía ... Sin embargo, no elimina un estilo que se ha aplicado con una regla CSS en una hoja de estilo o < estilo> elemento ". - ver stackoverflow.com/questions/27791484/…
Mörre

Respuestas:

139

Los valores predeterminados para CSS topy leftson auto, por lo que establecerlos en eso podría ser equivalente dependiendo de lo que intente hacer:

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

También tiene la opción de eliminar completamente el styleatributo:

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

Sin embargo, si está utilizando otros componentes de jQuery UI, es posible que requieran estilos en línea que no desee eliminar, así que proceda con precaución allí.

Rob Hruska
fuente
61
por lo general, estas sobrescrituras agregadas al atributo de estilo están destinadas a cambiar el valor del valor predeterminado de CSS; configurarlo en automático no los restablece al valor predeterminado. lo que significa que auto no es realmente lo mismo que no tener el valor en absoluto. entonces la respuesta correcta sería $ ('map'). css ('top', '');
dsomnus
15
Esta respuesta es incorrecta, no estás eliminando atributos sino reemplazándolos por otra cosa. Además, eliminar toda la etiqueta de estilo no tiene mucho sentido, es posible que desee conservar algunos atributos y eliminar otros. La respuesta de wtrevino es la correcta.
Alex
No es una opción esencial, así que tenerlo allí es genial. :) Para campos como nombre de usuario
Dean Meehan
55
Para el registro, la respuesta de @ wtrevino debería ser la aceptada aquí. Esta solución particular funcionó para mí en algunas circunstancias, pero eliminaría esta respuesta si pudiera. Desafortunadamente, ya que es aceptado, no me deja.
Rob Hruska
Esta no es la respuesta correcta ... La respuesta de @wtrevino es la más correcta. Esta respuesta solo funcionará si desea eliminar todos los estilos estáticos del elemento ... en la mayoría de los casos, esto no es lo que desea hacer.
Lars
427

Si desea eliminar específicamente los atributos superior e izquierdo y dejar otros, puede hacer esto:

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

O, un equivalente más corto:

$('.map').css({
    'top': '',
    'left': ''
});
wtrevino
fuente
64
Esta es una mejor respuesta que la seleccionada.
phirschybar
Sí. Esta es la respuesta correcta. Al principio no tenía sentido, porque parece que ".css ('top', '')" simplemente crea una regla vacía 'top', pero no, la elimina por completo.
Starkers
2
Esta es la mejor respuesta hasta ahora. Pero creo que encontré otro. Probé algunos diferentes. .css('left', undefined);No cambió nada. Pasar nulo tampoco hizo nada. Pero .css('left', false);elimina esa propiedad.
Viktor
Como otros han sugerido, esto debería considerarse las respuestas correctas.
1
@Viktor Tenga en cuenta que la documentación dice explícitamente que use una cadena vacía. Me pregunto si falso funciona debido a alguna coerción de tipo indocumentado que podría desaparecer en el futuro. api.jquery.com/css
Jeremy Wadhams
37

Puede eliminar todo el contenido del styleatributo haciendo lo siguiente:

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

Y puede eliminar correos específicos stylehaciendo:

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

Simplemente configure la propiedad CSS con una cadena vacía, por ejemplo con el siguiente código:

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

Consulte la documentación de jQuery en CSS .

khotyn
fuente
3
No estoy seguro de por qué esta no es la respuesta aceptada. La respuesta aceptada real es hacky porque en realidad no elimina la propiedad CSS del objeto, que es el título de la pregunta.
Paul Go
6
  1. Vaya aquí: API jQuery
  2. Ctrl + F para 'eliminar'
  3. Leer:

Al establecer el valor de una propiedad de estilo en una cadena vacía, por ejemplo, $ ("#mydiv") .css ("color", ""), se elimina esa propiedad de un elemento si ya se ha aplicado directamente, ya sea en el estilo HTML atributo, a través del método .css () de jQuery, o mediante la manipulación directa del DOM de la propiedad de estilo.

Los documentos le brindan el enfoque actual recomendado para lo que está tratando de lograr, que a menudo puede ahorrarle tiempo porque no tiene que leer de ida y vuelta las guerras de llamas en el desbordamiento de la pila (no importa cuán divertido / esclarecedor pueda ser) !).

Jacob McKay
fuente
5

Por este informe de error de JQuery

element.removeAttr ('estilo')
no funciona de manera consistente en navegadores basados ​​en Webkit. Por ejemplo, me encontré con este problema en iOS 6.1. La solución es usar:
element.attr ('estilo', '')

gnmerritt
fuente
2

Si quieres eliminarlo todo, puedes hacerlo

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

}

entonces si quieres eliminar css prop (s):

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

En mi opinión, la forma más limpia es eliminar la propiedad por completo de la CSSStyleDeclaration del elemento , en lugar de sobrescribirla con algún tipo de valor nulo / cero / predeterminado:

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

}

¡Elimine de forma segura con este complemento!

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

Abdennour TOUMI
fuente
0

Hay algunos estilos que no se pueden eliminar fácilmente (se me ocurre un desbordamiento)

Una solución alternativa sería crear 2 clases diferentes y agregar / eliminar la que contenga el estilo que desee.

NO es la mejor solución para las propiedades de estilo que se pueden quitar / deshabilitar fácilmente.

Petre Dan
fuente
0

Para eliminar estilos CSS, asigne una cadena vacía al estilo

en este caso

$('.map').css({top:'',left:''});
faboulaws
fuente
-1
 $("#map").css("top", "0"); 
 $("#map").css("left", "0"); 
Dijo Erraoudy
fuente
esto lo pone a 0, no elimina la propiedad
Martin Massera