Удалите CSS из Div с помощью JQuery

Я новичок в JQuery. В моем приложении у меня есть следующее:

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

Когда я нажимаю на Div, цвет этого Div изменяется. Внутри этой функции Click у меня есть некоторые функции. После всего этого я хочу удалить прикладной Css из Div. Как я могу сделать это в JQuery?

Ответ 1

Поместите свои свойства CSS в класс, затем сделайте что-то вроде этого:

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

Затем, когда ваши "другие функции" делают что-то вроде:

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

Ответ 2

Вы можете удалить определенный css, который находится на элементе, подобном этому:

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

Хотя я согласен с karim, что вы, вероятно, должны использовать классы CSS.

Ответ 3

Вы можете использовать метод removeAttr, если хотите удалить весь встроенный стиль, добавленный вручную с помощью javascript. Лучше использовать классы CSS, но вы никогда не знаете.

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

Ответ 4

Вы можете удалить встроенные свойства следующим образом:

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

Например:

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

Это по существу упомянуто выше, и это определенно делает трюк.

Кстати, это полезно в таких случаях, когда вам нужно очистить состояние после анимации. Конечно, я мог бы написать полдюжины классов, чтобы справиться с этим, или я мог бы использовать свой базовый класс, а #id - математику, и очистить встроенный стиль, который применяется в анимации.

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

Ответ 5

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(";"));
        });
    }
});

Ответ 6

В качестве примечания, в зависимости от свойства, вы можете установить его на авто.

Ответ 7

Задайте значение по умолчанию, например:

$(this).css( "высота", "авто" );

или в случае других функций CSS

$(this).css( "height", "inherit" );

Ответ 8

У меня тоже такая же проблема, просто удалите значение

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

Ответ 9

На самом деле лучший способ, который я нашел для этого, когда мне приходится делать сложный стиль на основе 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", как если бы вы писали стили inline. Все, что вам нужно сделать, - это очистить этот атрибут, а элемент должен reset к его оригинальным стилям

Надеюсь, что это поможет

Ответ 10

Если вы не хотите использовать классы (что вам действительно нужно), единственный способ выполнить то, что вы хотите, - сначала сохранить изменяющиеся стили:

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

// set style
// do your thing

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

Ответ 11

Я использовал второе решение user147767

Однако здесь есть опечатка. Это должно быть

curCssName.toUpperCase(). IndexOf (cssName.toUpperCase() + ':') < 0

не <= 0

Я также изменил это условие для:

! curCssName.match(новый RegExp (cssName + "(-. +)?:" ), "mi" )

поскольку иногда мы добавляем свойство css над jQuery, и оно добавлено другим способом для разных браузеров (т.е. свойство границы будет добавлено как "граница" для Firefox, а "border-top", "border-bottom" и т.д. для IE).

Ответ 12

Перед добавлением класса вы должны проверить, был ли у него уже класс с методом .hasClass()

По вашему конкретному вопросу. Вы должны помещать свои вещи в Cascading Stylesheet. Лучше всего отделять дизайн и функциональность.

поэтому предлагаемое решение по добавлению и удалению имен классов является наилучшей практикой.

однако, когда вы управляете элементами, вы не контролируете их визуализацию. removeAttr ('style') - лучший способ удалить все встроенные стили.

Ответ 13

Я немного изменил user147767 решение, чтобы использовать strings, arrays и objects в качестве входных данных:

/*!
 * 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/