是否有可能使用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 string
, set to faux value
和removeProperty()
之间没有太大的区别。 它们都导致相同的回退 – 这是预先给定的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' : '' });
等等…
只要把第二个参数留空!