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

Har*_*ldo 233 jquery

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

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

Jos*_*ber 377

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


这就是我想出来的,我希望这对你或其他任何人都有用:

$('#element').attr('style', function(i, style)
{
    return style && style.replace(/display[^;]+;?/g, '');
});
Run Code Online (Sandbox Code Playgroud)

这将删除该内联样式.

我不确定这是你想要的.你想要覆盖它,正如已经指出的那样,它很容易完成$('#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));
Run Code Online (Sandbox Code Playgroud)

如果您在脚本之前的页面中包含此插件,则可以直接调用

$('#element').removeStyle('display');
Run Code Online (Sandbox Code Playgroud)

那应该是诀窍.


更新:我现在意识到这一切都是徒劳的.您只需将其设置为空白即可:

$('#element').css('display', '');
Run Code Online (Sandbox Code Playgroud)

它将自动为您删除.

以下是文档的引用:

将样式属性的值设置为空字符串 - 例如$('#mydiv').css('color', '')- 如果已经直接应用了元素,则从元素中删除该属性,无论是在HTML样式属性中,还是通过jQuery .css()方法,还是通过样式属性的直接DOM操作.但是,它不会删除样式表或<style>元素中使用CSS规则应用的样式.

我不认为jQuery在这里有任何魔力; 似乎style对象本身就是这样做的.

  • 哈,爱你原来的解决方案,但当然jquery更简单... (11认同)
  • @mosh - 为什么不用`$('#element').css('display','')`? (4认同)
  • @ximi - 谢谢你.我一直在想这个问题,我认为这不是浪费时间.可以采用它来检查内联样式,目前在jQuery中没有支持(`.css('property')`给你的值,但它不会告诉你它是否来自内联样式). (3认同)

hei*_*erg 156

.removeAttr("style") 只是摆脱整个风格标签......

.attr("style") 测试值并查看是否存在内联样式...

.attr("style",newValue) 将它设置为其他东西

  • 这会影响_all_内联样式,而不仅仅是`display`. (18认同)
  • @Slaks好,这就是我所说的"摆脱整个风格标签";) (11认同)

小智 25

删除内联样式(由jQuery生成)的最简单方法是:

$(this).attr("style", "");
Run Code Online (Sandbox Code Playgroud)

内联代码应该消失,您的对象应该适应CSS文件中预定义的样式.

为我工作!


SLa*_*aks 13

您可以使用jQuery的css方法设置样式:

$('something:visible').css('display', 'none');
Run Code Online (Sandbox Code Playgroud)

  • +1:为`:visible`.现在,一直使用`.hide()`. (5认同)
  • @Kobi:`hide`解决了修改内联样式的一个特例.这个答案解决了所有情况.(`hide/show`也有两个限制,其中两个值被切换.即none-> block或none-> inline.) (3认同)

Yuk*_*élé 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]);
        });
    };
})();
Run Code Online (Sandbox Code Playgroud)

用法

$(".foo").removeInlineCss(); //remove all inline styles
$(".foo").removeInlineCss("display"); //remove one inline style
$(".foo").removeInlineCss("color font-size font-weight"); //remove several inline styles
Run Code Online (Sandbox Code Playgroud)

  • 这个答案包含一个非常简洁的单行技巧,即使没有 jQuery,它也很有用,而且可能没有多少开发人员知道——调用 `elem.style.removeProperty('margin-left')` 将从 `style' 中删除 `margin-left` ` 属性(并返回该属性的值)。对于 IE6-8 是 `elem.style.removeAttribute()`。 (2认同)

Joe*_*oel 9

懒惰的方式(这将导致未来的设计师诅咒你的名字并在睡梦中谋杀你):

#myelement 
{
    display: none !important;
}
Run Code Online (Sandbox Code Playgroud)

免责声明:我不提倡这种方法,但它肯定是懒惰的方式.

  • 这显然是这个问题的最佳答案,因为它本着不良做法的精神"懒惰".干杯! (2认同)

ant*_*paw 6

$('div[style*=block]').removeAttr('style');
Run Code Online (Sandbox Code Playgroud)


Woo*_*eru 6

如果要删除样式属性中的属性 - 而不仅仅是将其设置为其他属性 - 则可以使用以下removeProperty()方法:

document.getElementById('element').style.removeProperty('display');
Run Code Online (Sandbox Code Playgroud)

更新:
我已经做了一个互动的小提琴来玩弄不同的方法和结果.显然set to empty string,set to faux value和之间没有太大的区别removeProperty().它们都会产生相同的后备 - 这是预先给定的CSS规则或浏览器的默认值.


pau*_*dru 5

如果显示是您样式中唯一的参数,则可以运行此命令以删除所有样式:

$('#element').attr('style','');
Run Code Online (Sandbox Code Playgroud)

意味着如果您的元素之前看起来像这样:

<input id="element" style="display: block;">
Run Code Online (Sandbox Code Playgroud)

现在您的元素将如下所示:

<input id="element" style="">
Run Code Online (Sandbox Code Playgroud)