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?


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


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

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

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 .


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


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


2

Si quieres eliminarlo todo, puedes hacerlo

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

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

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

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


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.


0

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

en este caso

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.