使用jQuery删除CSS“ top”和“ left”属性


169

我正在构建一个可拖动的地图,当拖动地图时,该元素将被赋予“ left”和“ top”属性,并且每个属性的值都这样……

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

我有一个按钮,当我单击时,我想从div的内联样式中删除top和left属性,这对于jquery可能吗?


9
是的。至少您可以将它们设置为空值,然后将其删除。
Felix Kling 2012年

可能重复:使用Jquery删除CSS属性。那里的答案可能对您有所帮助。
德鲁·盖诺

需要注意的是' '不计,因为只有一个空值''
彼得·伯格

3
要一次仅删除一个CSS属性:var cssObject =$('selector').prop('style'); cssObject.removeProperty('top'); cssObject.removeProperty('left');
ilgaar 2013年

仅出于记录目的,设置为空并非总是可行:“将样式属性的值设置为空字符串...但是,这不会删除样式表或<样式>元素。” -看到stackoverflow.com/questions/27791484/...
Mörre

Answers:


139

CSS top和的默认值leftauto,因此根据您要执行的操作将它们设置为该值可能是等效的:

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

您还可以选择完全删除该style属性:

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

但是,如果您使用的是其他jQuery UI组件,则这些组件可能需要不需要删除的内联样式,因此请谨慎操作。


61
通常,将这些覆盖添加到样式属性中是为了将值从默认的css值更改为off;将其设置为自动不会将其重置为默认值。意思是auto并不是真的不一样,因此根本没有价值。因此正确的答案应该是$('map')。css('top','');
dsomnus

15
这个答案是错误的,您不是要删除属性而是将它们替换为其他内容。另外,删除整个样式标签没有多大意义,一个人可能想要保留一些属性,而删除其他属性。wtrevino的答案是正确的。
亚历克斯

它不是必不可少的选择,因此拥有它真是太好了!:)对于用户名之类的字段
Dean Meehan 2014年

5
作为记录,@ wtrevino的答案应该是这里接受的答案。这种特定的解决方案在某些情况下对我有用,但是如果可以的话,我会删除此答案。不幸的是,由于它被接受了,所以不会让我。
罗布·赫鲁斯卡

这不是正确答案... @wtrevino答案是最正确的。仅当您要从元素中删除所有静态样式时,此答案才有效...在大多数情况下,这不是您想要执行的操作。
拉斯,2015年

427

如果要专门删除顶部和左侧属性并保留其他属性,可以执行以下操作:

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

或者,更短的等效项:

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

64
这是一个比所选答案更好的答案。
phirschybar 2013年

是的 这是正确的答案。起初没有任何意义,因为它看起来像是“ .css('top','')”只是创建一个空的'top'规则,但不,它将完全删除它。
Starkers

2
这是最好的答案。但是我想我找到了另一个。我尝试了几种不同的方法。.css('left', undefined);没有改变任何东西。传递null也不做任何事情。但是.css('left', false);删除该属性。
维克多

正如其他人所建议的那样,应将其视为正确答案。

1
@Viktor请注意,文档中明确指出要使用空字符串。我不知道是否会因为将来可能消失的一些无证的类型强制而使错误起作用?api.jquery.com/css
杰里米·

37

您可以style通过执行以下操作删除属性中的所有内容:

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

您可以style通过执行以下操作删除特定的:

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

30

只需使用空字符串设置CSS属性,例如,使用以下代码:

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

请参阅CSS上的jQuery文档


3
不知道为什么这不是公认的答案。实际接受的答案是hacky,因为它实际上并未从对象中删除CSS属性,而该属性是问题的标题。
Paul Go

6
  1. 转到此处:jQuery API
  2. Ctrl + F代表“删除”
  3. 读:

将样式属性的值设置为空字符串,例如$(“ #mydiv”).css(“ color”,“”)-如果该属性已被直接应用(无论是HTML样式),则将其从元素中删除。属性,通过jQuery的.css()方法或通过对style属性的直接DOM操作。

该文档为您提供了当前推荐的解决方案,通常可以节省您的时间,因为您不必在堆栈溢出时来回读取火焰战争(无论可能会带来多大的乐趣/启发) !)。


5

根据此JQuery错误报告

element.removeAttr('style')
在基于Webkit的浏览器中不能始终如一地工作。例如,我在iOS 6.1上遇到了这个问题。解决方法是使用:
element.attr('style','')


2

如果要删除所有内容,可以执行

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

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

}

然后,如果您想删除css prop(s):

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

1

我认为最干净的方法是从元素的CSSStyleDeclaration中完全删除属性,而不是仅使用某种null / zero / default值覆盖它:

$(".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(';')+';');

}

使用此插件安全删除!

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


0

有些样式无法轻易删除。

一种解决方法是创建2个不同的类,然后添加/删除包含所需样式的类。

并非可以轻松删除/禁用的样式属性的最佳解决方案。


0

要删除CSS样式,请为样式分配一个空字符串

在这种情况下

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.