display:block
)。我懒得改,想用display:none
覆盖它。最好(懒人)的方法是什么?
display:block
)。我懒得改,想用display:none
覆盖它。更新:虽然以下解决方案可行,但有一种更简单的方法。请参见下文。
这是我想出来的方法,希望对您或其他任何人有所帮助:
$('#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', '');
根据文档所述:
将样式属性的值设置为空字符串 ——例如:
$('#mydiv').css('color', '')
——会从一个元素中移除该属性,如果它已经被直接应用,无论是在HTML样式属性中、通过jQuery的.css()
方法或者通过DOM操作应用。然而,它不会移除在样式表或者<style>
元素中已应用的样式规则。
我认为jQuery并没有进行任何魔法;似乎原生的style
对象就可以实现这个功能。
.css('property')
可以获取值,但无法告诉你它是否来自内联样式)。 - Joseph Silberstyle
对象似乎表现方式相同。我用这个信息修改了我的答案。 - Joseph Silber$('#element').css('display', '')
? - Joseph Silber.removeAttr("style")
可以直接移除整个 style 标签....attr("style")
可以获取并测试其值,看是否存在内联样式....attr("style",newValue)
可以将其设置为其他内容。display
。 - SLaks删除由jQuery生成的内联样式最简单的方法是:
$(this).attr("style", "");
内联代码应该消失,您的对象应该适应预定义在CSS文件中的样式。
对我起作用!
你可以像这样创建一个 jQuery 插件:
jQuery.fn.removeInlineCss = function (properties) {
if (properties == null) return this.removeAttr('style')
properties = properties.split(/\s+/)
return this.each(function () {
for (var i = 0; i < properties.length; i++)
this.style.removeProperty(properties[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
elem.style.removeProperty('margin-left')
将从style
属性中仅删除margin-left
(并返回该属性的值)。对于IE6-8,应使用elem.style.removeAttribute()
。 - craigpatik你可以使用jQuery的css
方法来设置样式:
$('something:visible').css('display', 'none');
<div style="display:block;">
,$('div').hide()
。 - Kobihide
隐藏的是修改内联样式的一个特殊情况,而这个答案则涵盖了所有情况。(hide/show
也有一个限制,只能在两个值之间切换,即 none->block 或 none->inline。) - Joelhide
/ show
会记住display
的旧值并正确恢复它。 - SLaks#myelement
{
display: none !important;
}
免责声明:我不倡导这种做法,但它确实是一种懒惰的方式。
如果你想要在样式属性中删除一个属性,而不仅仅是将其设置为其他值,你可以使用removeProperty()
方法:
document.getElementById('element').style.removeProperty('display');
更新:
我制作了一个交互式示例,以便尝试不同的方法及其结果。显然,“设置为空字符串”、“设置为假值”和“removeProperty()”之间没有太大区别,它们都产生相同的回退 - 这是预先给定的CSS规则或浏览器的默认值。
$("[style*=block]").hide();
$('div[style*=block]').removeAttr('style');
如果显示是您样式中唯一的参数,则可以运行此命令以删除所有样式:
$('#element').attr('style','');
<input id="element" style="display: block;">
<input id="element" style="">