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

时间:2010-03-17 19:14:59

标签: jquery

jQuery插件正在应用内联样式(display:block)。我感到很懒,想用display:none覆盖它。

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

15 个答案:

答案 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 stringset to faux valueremoveProperty()之间没有太大区别。它们都会产生相同的后备 - 这是预先给定的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>