如何删除添加了.css()函数的样式?

Ale*_*lex 841 javascript css jquery

我正在用jQuery更改CSS,我希望根据输入值删除我添加的样式:

if(color != '000000') $("body").css("background-color", color); else // remove style ?
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?请注意,只要使用颜色选择器选择颜色(即鼠标在色轮上移动时),就会运行上面的一行.

第二个注意:我不能这样做css("background-color", "none")因为它将从css文件中删除默认样式.我只想删除background-colorjQuery添加的内联样式.

小智 1295

将属性更改为空字符串似乎可以完成此任务.

__CODE__

  • 我必须在这里与@baacke站在一起.我们的客户仍然有IE6(!!)的官方最低要求.问题是,他们的客户遍布全球,包括欠发达国家."客户的客户"可能正在使用*非常旧的计算机与我们的客户开展业务.所以旧浏览器必须至少得到最低限度的支持,否则他们可能会失去业务...... (33认同)
  • 你们不能设定为客户开发的任何解决方案的要求.如果该客户希望或需要支持旧浏览器,那么它是您提供它的工作,期限.你们谈论"谁在乎"给真正的工程师一个坏名声. (8认同)
  • @EdDeGagne - 您经常需要停止支持旧版本的IE.这可以改善您的代码库并激励访问者不使用旧的IE.唯一困难的是弄清楚什么时候可以放弃支持.谷歌的网站,有很多访问者,如果他们决定放弃旧的IE,那么你可以相信他们这是一个很好的决定.一家公司甚至告诉他们的用户,他们更愿意为现代计算机购买每个旧的IE用户,而不是继续维护他们的IE代码(这正是他们提供的). (5认同)
  • 当我看到"IE8仍然是标准版,甚至在Windows 7上"时,我停止了阅读 (5认同)
  • @baacke当所谓的"标准"非常过时并且浪费了大量的开发时间时,这是一种耻辱.我对那些选择使用过时软件的公司没有什么同情,我不明白为什么我应该花更多的时间为他们开发. (4认同)
  • @baacke但是当谷歌停止关注它时,为什么有人会关心IE9?如果你的雇主真的需要它,那么是的,你没有选择,但不能证明他的决定是正确的:) (3认同)
  • 不要燃烧任何火焰......在财富100强企业工作20多年之后,我觉得你在制造一些尴尬和过时的限制条件下工作的痛苦是因为无知的"买"而非"建立"偏见和其他公司IT无能.SlavikMe只是错误告诉用户受苦.他们不应该.应该是无能的IT老板允许这样的混乱.实际上,虽然压力和责任归咎于食物链中的最低点 - 开发商.来吧,这是评论的2015年.甚至IE10(没有Flexbox支持)也无关紧要. (3认同)
  • @baacke,越多开发者停止支持IE9-,越多用户将找到升级方式,IE10或其他浏览器.你也帮他们一个忙.是你想要看到的变化;).此外,谷歌已经放弃了对IE9的支持.http://thenextweb.com/google/2013/11/05/google-drops-internet-explorer-9-support-google-apps-less-three-weeks-ie11s-release/ (2认同)
  • @janko-m,那不是你的工作。您的工作只是通知您的客户,而不是告诉他们您不会或将要做什么。您会对拥有 1,000 台最终用户计算机的大型企业级客户说些什么?你会告诉他们你没有这样做,他们需要在交付你的解决方案之前升级所有这些电脑吗?顺便说一句,无论您认为自己在某处阅读了什么,Google 实际上都可以在较旧的 IE 浏览器中正常工作并优雅地降级。 (2认同)
  • @EdDeGagne大声笑,你对此非常认真,我现在才意识到baacke的回答是多么伟大.当然,在你的例子中,你注定要关心IE6-IE8,但希望我们大多数人都不会处于这种情况.我只是说,为了提高全球95%的用户体验,有时会付出更多.此外,已经测量到,与旧IE用户相比,残疾用户数量更多,雇主仍然更关心旧IE,而不是提高可访问性.为什么你说我"想"我读了它?我*知道*我在Google的网站上看到了它:https://support.google.com/a/answer/33864?hl = en (2认同)
  • 请注意,空字符串*对于许多属性(例如位置等)以及某些常见的用户浏览器都无效*,如上所述。对于位置,您希望将其设置为“自动”,而不是“”。 (2认同)

Thi*_*iff 529

接受的答案有效但style在我的测试中在DOM上留下了一个空属性.没什么大不了的,但是这一切都消除了:

removeAttr( 'style' );
Run Code Online (Sandbox Code Playgroud)

这假设您要删除所有动态样式并返回样式表样式.

  • 这将删除style属性中的所有其他属性.所以明智地选择. (7认同)
  • @Tosh那个bug已经解决了8/25/2011:http://bugs.jquery.com/timeline?from = 2011-08-25T19%3A34%3A45Z &precision = second (4认同)

Kri*_*Dev 167

有几种方法可以使用jQuery删除CSS属性:

1.将CSS属性设置为其默认(初始)值

.css("background-color", "transparent")
Run Code Online (Sandbox Code Playgroud)

查看MDN上CSS属性初始值.这里的默认值是transparent.您还可以使用inherit多个CSS属性从其父级继承该属性.在CSS3/CSS4,你也可以使用initial,revertunset但这些关键字可能只有有限的浏览器的支持.

2.删除CSS属性

空字符串删除CSS属性,即

.css("background-color","")
Run Code Online (Sandbox Code Playgroud)

但请注意,正如jQuery .css()文档中所指定的,这会删除该属性,但它与IE8的某些CSS速记属性(包括背景)存在兼容性问题.

将style属性的值设置为空字符串 - 例如$('#mydiv').css('color','') - 如果已经直接应用了元素,则从元素中删除该属性,无论是HTML样式属性,通过jQuery的.css()方法,或通过样式属性的直接DOM操作.但是,它不会删除样式表或元素中使用CSS规则应用的样式.警告:一个值得注意的例外是,对于IE 8及更低版本,删除边框或背景等速记属性将完全从元素中删除该样式,无论样式表或元素中设置了什么.

3.删除元素的整个样式

.removeAttr("style")
Run Code Online (Sandbox Code Playgroud)


Mar*_*wan 47

我找到了使用纯JavaScript删除样式属性的方法,只是为了让您了解纯JavaScript的方式

var bodyStyle = document.body.style;
if (bodyStyle.removeAttribute)
    bodyStyle.removeAttribute('background-color');
else        
    bodyStyle.removeProperty('background-color');
Run Code Online (Sandbox Code Playgroud)

  • 因为jquery并不是所有的东西,因为她或者我应该说我们每个人都应该知道兼容性意味着什么,以及如何用核心语言作为JavaScript来做这样的事情,也许这就是我的理论,我已经创建了自己的框架从我对核心JavaScript的了解,我拒绝使用其他东西,我有自己的概念和我的思维方式:)顺便感谢你( - )我只需要增值:)和顺便说一句不是一个男人,她是一个名叫亚历克斯的人 (32认同)
  • 这家伙已经使用了jQuery ...为什么还要重新实现跨浏览器方法!?!? (10认同)
  • 不,你肯定应该检查是否存在该功能而不是检查浏览器.如果MS决定在下一版IE中更改功能名称怎么办?那你去检查IE的版本吗? (9认同)

小智 22

这将删除完整标记:

  $("body").removeAttr("style");
Run Code Online (Sandbox Code Playgroud)


Mah*_*wad 17

这些jQuery函数中的任何一个都应该工作:

$("#element").removeAttr("style");
$("#element").removeAttr("background-color") 
Run Code Online (Sandbox Code Playgroud)

  • 要只删除一个css属性:`var cssObject = $('selector').prop('style'); cssObject.removeProperty( '背景颜色');` (20认同)
  • 如果由.css()添加,则第二行不起作用; (4认同)

per*_*mon 7

2018年

有原生 API

element.style.removeProperty(propery)
Run Code Online (Sandbox Code Playgroud)


ncl*_*clu 6

怎么样的:

var myCss = $(element).attr('css');
myCss = myCss.replace('background-color: '+$(element).css('background-color')+';', '');
if(myCss == '') {
  $(element).removeAttr('css');
} else {
  $(element).attr('css', myCss);
}
Run Code Online (Sandbox Code Playgroud)


小智 6

试试这个:

$('#divID').css({"background":"none"});// remove existing

$('#divID').css({"background":"#bada55"});// add new color here.
Run Code Online (Sandbox Code Playgroud)

谢谢


小智 6

只是使用:

$('.tag-class').removeAttr('style');
Run Code Online (Sandbox Code Playgroud)

要么

$('#tag-id').removeAttr('style');
Run Code Online (Sandbox Code Playgroud)


小智 5

如果使用CSS样式,则可以使用:

$("#element").css("background-color","none"); 
Run Code Online (Sandbox Code Playgroud)

然后替换为:

$("#element").css("background-color", color);
Run Code Online (Sandbox Code Playgroud)

如果您不使用CSS样式并且HTML元素中有属性,则可以使用:

$("#element").attr("style.background-color",color);
Run Code Online (Sandbox Code Playgroud)


Abd*_*UMI 5

使用我的插件:

$.fn.removeCss=function(all){
        if(all===true){
            $(this).removeAttr('class');
        }
        return $(this).removeAttr('style')
    }
Run Code Online (Sandbox Code Playgroud)

对于您的情况,请按以下方式使用它:

$(<mySelector>).removeCss();
Run Code Online (Sandbox Code Playgroud)

要么

$(<mySelector>).removeCss(false);
Run Code Online (Sandbox Code Playgroud)

如果你想删除其类中定义的CSS:

$(<mySelector>).removeCss(true);
Run Code Online (Sandbox Code Playgroud)

  • 啊!OK OK .. @EmileBergeron,旧的jquery提供`this`作为`HTMLElement`实例映射到jQuery元素......如你所见,我的答案是旧的...这就是为什么..无论如何,我可以告诉你为什么他们改变这一点,他们这样做是因为在ES6中出现了新的箭头功能...和`this`变得无用,它被`event.currentTarget`取代 (2认同)