更新:虽然以下解决方案有效,但还有一种更简单的方法。见下文。
这是我想出的,我希望这对你或其他人有用:
$('#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() 方法,还是通过样式属性的直接 DOM 操作。但是,它不会删除已在样式表或 <style> 元素中使用 CSS 规则应用的样式。
我不认为 jQuery 在这里有什么神奇之处; it seems the style object does this natively.