是否有可能使用jQuery删除内联样式?

一个jQuery插件应用内联样式( display:block )。 我感觉很懒,想用display:none覆盖它。

什么是最好的(懒惰)的方式?

更新:下面的解决scheme工作,有一个更简单的方法。 见下文。


这就是我想出来的,我希望这一点很方便 – 对你或任何其他人:

 $('#element').attr('style', function(i, style) { return style && style.replace(/display[^;]+;?/g, ''); }); 

这将删除内联样式。

我不确定这是你想要的。 你想覆盖它,正如已经指出的那样,它很容易通过$('#element').css('display', 'inline')

我正在寻找的是一个完全删除内联样式的解决scheme。 我需要这个插件,我正在写的地方,我必须暂时设置一些内联的CSS值,但希望以后删除它们; 我想要样式表取回控制。 我可以通过存储所有的原始值,然后把它们放回内联,但是这个解决scheme对我来说更加清洁。


这里是插件格式:

 (function($) { $.fn.removeStyle = function(style) { var search = new RegExp(style + '[^;]+;?', 'g'); return this.each(function() { $(this).attr('style', function(i, style) { return style && style.replace(search, ''); }); }); }; }(jQuery)); 

如果在脚本之前在页面中包含此插件,则可以直接调用

 $('#element').removeStyle('display'); 

这应该是诀窍。


更新 :我现在意识到这一切都是徒劳的。 您可以简单地将其设置为空白:

 $('#element').css('display', ''); 

它会自动被删除。

以下是文档中的一段引文:

将样式属性的值设置为一个空string – 例如$('#mydiv').css('color', '') – 如果元素已经被直接应用,属性,通过jQuery的.css()方法,或者通过对style属性的直接DOM操作。 但是,它不会删除样式表或<style>元素中已应用CSS规则的样式。

我不认为jQuery在这里做什么魔术; 这似乎是style对象本身做到这一点 。

.removeAttr("style")以摆脱整个风格标签…

.attr("style")来testing值,看看是否存在内联样式…

.attr("style",newValue)将其设置为其他值

删除内联样式(由jQuery生成)最简单的方法是:

 $(this).attr("style", ""); 

内联代码应该消失,你的对象应该调整CSS文件中预定义的样式。

为我工作!

你可以使用jQuery的css方法设置样式:

 $('something:visible').css('display', 'none'); 

你可以创build一个像这样的jQuery插件:

 jQuery.fn.removeInlineCss = (function(){ var rootStyle = document.documentElement.style; var remover = rootStyle.removeProperty // modern browser || rootStyle.removeAttribute // old browser (ie 6-8) return function removeInlineCss(properties){ if(properties == null) return this.removeAttr('style'); proporties = properties.split(/\s+/); return this.each(function(){ for(var i = 0 ; i < proporties.length ; i++) remover.call(this.style, proporties[i]); }); }; })(); 

用法

 $(".foo").removeInlineCss(); //remove all inline styles $(".foo").removeInlineCss("display"); //remove one inline style $(".foo").removeInlineCss("color font-size font-weight"); //remove several inline styles 

懒惰的方式(这将导致未来的devise师诅咒你的名字,并在你的睡眠中谋杀你):

 #myelement { display: none !important; } 

免责声明:我不主张这种做法,但肯定是懒惰的方式。

 $('div[style*=block]').removeAttr('style'); 
 $("[style*=block]").hide(); 

如果你想在一个style属性中删除一个属性,而不是将其设置为其他属性,那么你可以使用removeProperty()方法:

 document.getElementById('element').style.removeProperty('display'); 

更新:
我做了一个互动的小提琴来演奏不同的方法和结果。 显然, set to empty stringset to faux valueremoveProperty()之间没有太大的区别。 它们都导致相同的回退 – 这是预先给定的CSS规则或浏览器的默认值。

如果显示是您的样式中唯一的参数,则可以运行此命令以删除所有样式:

 $('#element').attr('style',''); 

意思是说如果你的元素看起来像这样:

 <input id="element" style="display: block;"> 

现在你的元素将如下所示:

 <input id="element" style=""> 

这是我写的插入jQuery的inlineStyleselect器filter 。

 $("div:inlineStyle(display:block)") // will select all divs with an inline style of display: block set 

在你的情况下,你可以使用这样的:

 $("div:inlineStyle(display:block)").hide(); 

改变插件不再适用风格。 那样比去掉那里的风格要好得多。

$el.css({ height : '', 'margin-top' : '' });

等等…

只要把第二个参数留空!