小编典典

是否可以使用 jQuery 删除内联样式?

all

一个 jQuery 插件正在应用内联样式 ( display:block)。我感觉很懒,想用display:none.

最好的(懒惰的)方法是什么?


阅读 61

收藏
2022-05-25

共1个答案

小编典典

更新: 虽然以下解决方案有效,但还有一种更简单的方法。见下文。


这是我想出的,我希望这能派上用场 - 对你或其他任何人:

$('#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>元素中使用 CSS 规则应用的样式。

我不认为 jQuery 在这里做了什么魔术。似乎该style对象本身就是这样做的。

2022-05-25