Update:虽然下面的解决方案有效,但还有一个简单得多的方法.请参见下面的内容.
这是我想出来的,我希望这能派上用场--对你或其他任何人都有用:
$('#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');
这应该能奏效.
Update:我现在意识到这一切都是徒劳的.
$('#element').css('display', '');
它会自动为您移除.
下面是the docs句话中的一句话:
如果样式属性已经被直接应用(无论是在HTML样式属性中,通过jQuery的
.css()
方法,还是通过对样式属性的直接DOM操作),将样式属性的值设置为空字符串(例如$('#mydiv').css('color', '')
),就会从元素中删除该属性.但是,它不会删除样式表或<style>
元素中已应用CSS规则的样式.
我不认为jQuery在这里有什么神奇之处;it seems the style
object does this natively.