使用JQuery从Div中删除CSS


169

我是JQuery的新手。在我的应用程序中,我具有以下内容:

$("#displayPanel div").live("click", function(){
  $(this).css({'background-color' : 'pink', 'font-weight' : 'bolder'});
});

当我单击一个Div时,该Div的颜色就会更改。在该Click函数中,我需要执行一些功能。毕竟,我想从Div中删除已应用的CSS。如何在JQuery中做到这一点?


男孩,你打开了一罐蠕虫!
捏住

Answers:


163

将您的CSS属性放入类中,然后执行以下操作:

$("#displayPanel div").live("click", function(){
   $(this).addClass('someClass');
});

然后在您的“其他功能”执行以下操作:

$("#myButton").click(function(){
   $("#displayPanel div").removeClass('someClass');
});

3
@Aruna:我现在有点害怕-如何你把风格的元素?如果您的CSS不在样式表/块中,则不是CSS。
annakata

8
@annakata:肯定是…… <div style="xxx"/>仍然是CSS……这不是一个很好的方法,但是确实有效。
mpen 2010年

127
如果您在进行动画或复杂渲染时即时修改某些内容,那么此答案并不能解决所有问题。问题不是关于如何组织CSS,而是关于如何删除CSS选项。
FMaz008 2011年

5
@ FMaz008-动画和复杂的渲染超出了他的要求。阅读问题:“ ...毕竟,我想从Div中删除已应用的CSS”。因此,他可以在@ToRrEs的答案中使用addClassor removeClassremoveAttr('style')
karim79 2011年

1
尽管下面的内容对我也很有效,但我还是觉得这是最好的解决方案,因为我更喜欢进行所有样式设置,或者至少在样式表中进行尽可能多的样式设置。我最终以这种方式做事。
LondonGuy 2012年

307

您可以删除元素上的特定css,如下所示:

$(this).css({'background-color' : '', 'font-weight' : ''});

尽管我同意karim的观点,但您可能应该使用CSS类。


这将删除以前的背景颜色和字体粗细设置
Philippe Leybaert,2009年

@Dave在IE7中为我提供了漂亮的功能,它删除了直接直接应用于元素的样式,而不是删除通过CSS类应用的样式。
ErikE 2011年

问题是,当将background设置为''时,IE7会为所有不同的background- *属性愉快地添加默认值。这意味着,如果您另外设置了background- *属性(例如,通过类),则将其清除。我必须在我们的产品中处理这个特定问题。
Dave Van den Eynde 2011年

尽管我最终使用了addClass,但我发现效果不错,因为样式应该在样式表中完成。我个人喜欢保持事情井井有条。
LondonGuy 2012年

请注意,这与$ element.css('top','');不同,后者不会删除样式。您必须传递一个对象:$ element.css({'top:''});
Tom McKenzie 2012年

223

如果要删除使用javascript手动添加的所有内联样式,则可以使用removeAttr方法。最好使用CSS类,但您永远不会知道。

$("#displayPanel div").removeAttr("style")


18
这比使用其他类+1更好。
o15a3d4l11s2,2010年

6
好的答案-jQuery的.css('style-name', 'style-value')功能向元素添加了内联样式-并且对于动态更新样式至关重要。拖放脚本可能会更改绝对定位元素的topleft样式-使用类是不切实际的实例。
leepowers 2010年

它比其他选项要好,因为我们只需要删除样式即可。
gautamlakum 2010年

4
就像要补充一点,chrome无法正确处理此问题,如此处所示更安全的选择是使用'attr('style','')。
安德鲁

好答案。只要你一定要有你内嵌CSS 一次就执行删除(因为往往是动画的情况下),那么这是要走的路。
Jacob Stamm

40

您可以通过以下方式删除内联属性:

$(selector).css({'property':'', 'property':''});

例如:

$(actpar).css({'top':'', 'opacity':''});

上面基本上提到了这一点,并且确实可以解决问题。

顺便说一句,这在需要动画后清除状态的情况下很有用。当然,我可以编写六个类来解决这个问题,或者可以使用基类和#id进行一些数学运算,并清除动画应用的内联样式。

$(actpar).animate({top:0, opacity:1, duration:500}, function() {
   $(this).css({'top':'', 'opacity':''});
});

只是我一直在寻找的东西,删除了内联样式..谢谢
Naveen

12
jQuery.fn.extend
({
    removeCss: function(cssName) {
        return this.each(function() {
            var curDom = $(this);
            jQuery.grep(cssName.split(","),
                    function(cssToBeRemoved) {
                        curDom.css(cssToBeRemoved, '');
                    });
            return curDom;
        });
    }
});

/*example code: I prefer JQuery extend so I can use it anywhere I want to use.

$('#searchJqueryObject').removeCss('background-color');
$('#searchJqueryObject').removeCss('background-color,height,width'); //supports comma separated css names.

*/

要么

//this parse style & remove style & rebuild style. I like the first one.. but anyway exploring..
jQuery.fn.extend
({
    removeCSS: function(cssName) {
        return this.each(function() {

            return $(this).attr('style',

            jQuery.grep($(this).attr('style').split(";"),
                    function(curCssName) {
                        if (curCssName.toUpperCase().indexOf(cssName.toUpperCase() + ':') <= 0)
                            return curCssName;
                    }).join(";"));
        });
    }
});

有什么办法可以删除所有的CSS属性吗?
西蒙·阿诺德

我尝试了第一个,效果很好!对于可能不知道的所有新手:css('attr','')与删除该attr并不相同!
2012年


5

设置默认值,例如:

$(this).css(“ height”,“ auto”);

或其他CSS功能

$(this).css(“ height”,“ inherit”);


5

实际上,这是我必须进行基于jquery的复杂样式时发现的最佳方法,例如,如果您有一个需要显示的模式,但它需要计算页面偏移量以获得正确的参数,这些参数将需要输入jQuery(“ x”)。css({})函数。

因此,这里是样式的设置,即基于各种因素计算出的变量的输出。

$(".modal").css({ border: "1px solid #ccc", padding: "3rem", position: "absolute", zIndex: 999, background: "#fff", top: "30", visibility: "visible"})

为了清除那些样式。而不是像

$(".modal").css({ border: "", padding: "", position: "", zIndex: 0, background: "", top: "", visibility: ""})

简单的方法是

$(".modal").attr("style", "")

当jquery操作dom上的元素时,将样式写入“ style”属性中的元素,就好像您是内联编写样式一样。您要做的就是清除该属性,并且该项目应重置为原始样式

希望这可以帮助


4

我也有相同的概率,只是删除值

<script>
      $("#play").toggle(function(){$(this).css("background","url(player.png) -100px 0px no-repeat");},
      function(){$(this).css("background","");});
</script>

2

如果您不想使用类(您确实应该使用),则完成所需操作的唯一方法是先保存更改的样式:

var oldFontSize = $(this).css("font-size");
var oldBackgroundColor = $(this).css("background-color");

// set style
// do your thing

$(this).css("font-size",oldFontSize);
// etc...

2

我使用了user147767的第二个解决方案

但是,这里有一个错字。它应该是

curCssName.toUpperCase()。indexOf(cssName.toUpperCase()+':')<0

不<= 0

我还将此条件更改为:

!curCssName.match(new RegExp(cssName +“(-。+)?:”),“ mi”)

有时我们会在jQuery上添加css属性,并且以不同的方式为不同的浏览器添加属性(即,对于Firefox,border属性将添加为“ border”,对于IE,则将其添加为“ border-top”,“ border-bottom”等)。


1

在添加类之前,应使用.hasClass()方法检查类是否已经存在

对于您的特定问题。您应该将自己的内容放入层叠样式表中。最好的做法是将设计和功能分开。

因此,建议的添加和删除类名的解决方案是最佳实践。

但是,当您操纵元素时,您无法控制它们的呈现方式。removeAttr('style')是删除所有内联样式的最佳方法。


1

我修改user147767的解决一下,以便能够使用stringsarraysobjects作为输入:

/*!
 * jquery.removecss.js v0.2 - https://stackoverflow.com/a/17196154/1250044
 * Remove multiple properties from an element in your DOM.
 *
 * @author Yannick Albert | #yckart
 * @param {Array|Object|String} css
 *
 * Copyright (c) 2013 Yannick Albert (http://yckart.com)
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php).
 * 2013/06/19
 **/

$.fn.removeCss = function (css) {
    var properties = [];
    var is = $.type(css);

    if (is === 'array') properties = css;
    if (is === 'object') for (var rule in css) properties.push(rule);
    if (is === 'string') properties = css.replace(/,$/, '').split(',');

    return this.each(function () {
        var $this = $(this);
        $.map(properties, function (prop) {
            $this.css(prop, '');
        });
    });
};

// set some styling
$('body').css({
    color: 'white',
    border: '1px solid red',
    background: 'red'
});

// remove it again
$('body').removeCss('background');
$('body').removeCss(['border']);
$('body').removeCss({
    color: 'white'
});

http://jsfiddle.net/ARTsinn/88mJF/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.