jQuery插件正在应用内联样式(display:block
)。我感到很懒,想用display:none
覆盖它。
什么是最好的(懒惰的)?
答案 0 :(得分:370)
更新:,而以下解决方案有效,方法更简单。见下文。
这是我想出的,我希望这对你或其他任何人都有用:
$('#element').attr('style', function(i, style)
{
return style && style.replace(/display[^;]+;?/g, '');
});
这将删除该内联样式。
我不确定这是你想要的。你想覆盖它,正如已经指出的那样,$('#element').css('display', 'inline')
很容易完成。
我正在寻找的是完全删除内联样式的解决方案。 我需要这个插件我正在编写,我必须暂时设置一些内联CSS值,但希望以后删除它们;我希望样式表能够取回控制权。 我可以通过存储所有原始值然后将它们重新插入内容来实现,但这个解决方案对我来说感觉更清晰。
这是插件格式:
(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', '');
并会自动删除它。
以下是the docs的引用:
将样式属性的值设置为空字符串 - 例如
$('#mydiv').css('color', '')
- 如果元素已经直接应用,则从元素中删除该属性,无论是在HTML样式属性中,还是通过jQuery的.css()
方法,还是通过对style属性的直接DOM操作。但是,它不会删除样式表或<style>
元素中使用CSS规则应用的样式。
我不认为jQuery在这里有任何魔力; it seems the style
object does this natively
答案 1 :(得分:153)
.removeAttr("style")
只是摆脱整个样式标签......
.attr("style")
测试值并查看是否存在内联样式...
.attr("style",newValue)
将其设置为其他内容
答案 2 :(得分:23)
删除内联样式(由jQuery生成)的最简单方法是:
$(this).attr("style", "");
内联代码应该消失,您的对象应该调整CSS文件中预定义的样式。
为我工作!
答案 3 :(得分:13)
您可以使用jQuery的css
方法设置样式:
$('something:visible').css('display', 'none');
答案 4 :(得分:12)
你可以像这样创建一个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
答案 5 :(得分:9)
懒惰的方式(这将导致未来的设计师诅咒你的名字并在睡梦中谋杀你):
#myelement
{
display: none !important;
}
免责声明:我不提倡这种做法,但肯定是懒惰的方式。
答案 6 :(得分:6)
$("[style*=block]").hide();
答案 7 :(得分:6)
$('div[style*=block]').removeAttr('style');
答案 8 :(得分:6)
如果您想删除样式属性中的属性 - 而不仅仅是将其设置为其他属性 - 您可以使用removeProperty()
方法:
document.getElementById('element').style.removeProperty('display');
更新:
我已经制作了一个互动fiddle来讨论不同的方法和结果。显然,set to empty string
,set to faux value
和removeProperty()
之间没有太大区别。它们都会产生相同的后备 - 这是预先给定的CSS规则或浏览器的默认值。
答案 9 :(得分:5)
如果显示是您样式中唯一的参数,您可以运行此命令以删除所有样式:
$('#element').attr('style','');
意味着如果您的元素之前看起来像这样:
<input id="element" style="display: block;">
现在您的元素将如下所示:
<input id="element" style="">
答案 10 :(得分:3)
这是一个插入jQuery的inlineStyle selector filter I wrote。
$("div:inlineStyle(display:block)") // will select all divs with an inline style of display: block set
在你的情况下你可以使用它:
$("div:inlineStyle(display:block)").hide();
答案 11 :(得分:2)
将插件更改为不再应用该样式。这比删除那里的风格要好得多。
答案 12 :(得分:1)
$el.css({
height : '',
'margin-top' : ''
});
等...
将第二个参数留空!
答案 13 :(得分:0)
$("#element").css({ display: "none" });
起初,我尝试删除CSS中的内联样式,但是它不起作用,并且新样式如display:不会覆盖任何样式。但在JQuery中,它的工作原理如下。
答案 14 :(得分:0)
我对width属性也有类似的问题。我无法从代码中删除!important,由于它需要在新模板上使用此样式,因此我向元素添加了一个Id(模态样式),然后我向模板中添加了以下代码:
<script type="text/javascript">
$('#modalstyling').css('width', ''); //Removal of width !important
$('#modalstyling').width('75%'); //Set custom width
</script>