Xóa CSS khỏi Div bằng JQuery


169

Tôi mới biết về JQuery. Trong ứng dụng của tôi, tôi có những điều sau đây:

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

Khi tôi nhấp vào Div, màu của Div đó sẽ thay đổi. Trong chức năng Click đó tôi có một số chức năng để làm. Sau tất cả những gì tôi muốn xóa Css đã áp dụng khỏi Div. Làm thế nào tôi có thể làm điều đó trong JQuery?


Chàng trai, bạn đã mở một lon giun!
Pinch

Câu trả lời:


163

Đặt các thuộc tính CSS của bạn vào một lớp, sau đó làm một cái gì đó như thế này:

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

Sau đó, 'các chức năng khác' của bạn đang làm gì đó như:

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

3
@Aruna: Tôi là một chút sợ hãi bây giờ - như thế nào được bạn đưa phong cách trên phần tử? Nếu CSS của bạn không có trong biểu định kiểu / chặn thì đó không phải là CSS.
annakata

8
@annakata: Chắc chắn đó là ... <div style="xxx"/>vẫn là CSS ... nó không phải là một cách tốt để làm điều đó, nhưng nó hoạt động.
mở

127
Câu trả lời này không giúp ích gì cho tất cả các trường hợp bạn sửa đổi một cái gì đó một cách nhanh chóng để thực hiện hoạt hình hoặc kết xuất phức tạp. Câu hỏi không phải là về cách tổ chức CSS, mà là cách loại bỏ tùy chọn CSS.
FMaz008

5
@ FMaz008 - Hoạt hình và kết xuất phức tạp là vượt quá những gì anh ấy yêu cầu. Đọc câu hỏi: "... Sau tất cả những gì tôi muốn xóa Css đã áp dụng khỏi Div". Vì vậy, anh ta có thể sử dụng addClasshoặc removeClasshoặc removeAttr('style')như trong câu trả lời của @ ToRrEs.
karim79

1
Mặc dù bên dưới cũng có tác dụng với tôi nhưng tôi cảm thấy đây là giải pháp tốt nhất khi tôi thích tạo kiểu TẤT CẢ hoặc ít nhất có thể trong các bảng định kiểu của mình. Tôi đã kết thúc việc làm theo cách này.
Luân Đôn

307

Bạn có thể xóa css cụ thể trên phần tử như thế này:

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

Mặc dù tôi đồng ý với karim rằng có lẽ bạn nên sử dụng các lớp CSS.


Điều đó sẽ xóa các cài đặt trước đó cho màu nền và trọng lượng phông chữ
Philippe Leybaert

@Dave đã hoạt động rất tốt trong IE7 để tôi loại bỏ các kiểu được áp dụng trực tiếp vào phần tử , không xóa các kiểu được áp dụng thông qua các lớp css.
ErikE

Vấn đề là khi đặt nền thành '', IE7 vui vẻ thêm mặc định cho tất cả các thuộc tính nền- * khác nhau. Điều đó có nghĩa là nếu bạn có thuộc tính nền- * được đặt khác (chẳng hạn như các lớp thông qua) thì chúng sẽ bị xóa bởi điều này. Tôi đã phải đối phó với vấn đề cụ thể này trong sản phẩm của chúng tôi.
Dave Van den Eynde

Làm việc tốt cho tôi mặc dù tôi đã kết thúc bằng cách sử dụng addClass xem như kiểu dáng nên được thực hiện trong biểu định kiểu. Cá nhân tôi thích giữ mọi thứ có tổ chức.
Luân Đôn

Lưu ý rằng điều này KHÔNG giống như $ Element.css ('top', '');, không xóa kiểu. Bạn phải vượt qua trong một đối tượng: $ Element.css ({'top:' '});
Tom McKenzie

223

Bạn có thể sử dụng phương thức removeAttr, nếu bạn muốn xóa tất cả kiểu nội tuyến bạn đã thêm bằng tay với javascript. Tốt hơn là sử dụng các lớp CSS nhưng bạn không bao giờ biết.

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


18
Đây là một giải pháp tốt hơn so với sử dụng lớp bổ sung, +1.
o15a3d4l11s2

6
Câu trả lời hay - .css('style-name', 'style-value')Hàm của jQuery thêm các kiểu nội tuyến vào một phần tử - và rất cần thiết để cập nhật các kiểu một cách nhanh chóng. Một tập lệnh kéo / thả có thể thay đổi kiểu topleftkiểu của một phần tử được định vị tuyệt đối - một trường hợp sử dụng các lớp là không thực tế.
leepowers

Nó là tốt hơn so với các tùy chọn khác vì chúng ta chỉ cần loại bỏ phong cách.
gautamlakum

4
Cũng giống như thêm rằng chrome sẽ không xử lý chính xác điều này như đã thấy ở đây, một tùy chọn an toàn hơn sẽ sử dụng 'attr (' style ',' ').
Andrew

Câu trả lời chính xác. Miễn là bạn chắc chắn chỉ có CSS ​​nội tuyến mà bạn muốn xóa sau khi điều này được thực thi (như thường thấy đối với hoạt ảnh), thì đây là cách để đi.
Jacob Stamm

40

Bạn có thể xóa thuộc tính nội tuyến theo cách này:

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

Ví dụ:

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

Điều này về cơ bản được đề cập ở trên, và nó chắc chắn thực hiện các mẹo.

BTW, điều này rất hữu ích trong các trường hợp như khi bạn cần xóa trạng thái sau khi hoạt hình. Chắc chắn tôi có thể viết một nửa tá lớp để giải quyết vấn đề này hoặc tôi có thể sử dụng lớp cơ sở của mình và #id làm một số phép toán và xóa kiểu nội tuyến mà hoạt hình áp dụng.

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

chỉ cần một cái gì đó tôi đang tìm kiếm, loại bỏ các kiểu nội tuyến .. cảm ơn
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.

*/

HOẶC LÀ

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

Có cách nào chúng ta có thể loại bỏ tất cả các thuộc tính css với điều này không?
Simon Arnold

Tôi đã thử cái đầu tiên và nó hoạt động rất đẹp! Đối với tất cả những người mới có thể chưa biết: css ('attr', '') không giống như loại bỏ attr đó!
Ẩn danh

7

Lưu ý, tùy thuộc vào tài sản, bạn có thể đặt thành tự động.


5

Đặt giá trị mặc định, ví dụ:

$ (này) .css ("chiều cao", "tự động");

hoặc trong trường hợp các tính năng CSS khác

$ (này) .css ("chiều cao", "kế thừa");


5

Trên thực tế, cách tốt nhất mà tôi đã tìm thấy để làm điều này khi phải thực hiện kiểu dáng dựa trên jquery phức tạp, ví dụ, nếu bạn có một phương thức mà bạn cần hiển thị nhưng nó cần tính toán bù đắp trang để có được các tham số chính xác cần phải đi vào hàm jQuery ("x"). css ({}).

Vì vậy, đây là cài đặt của các kiểu, đầu ra của các biến đã được tính toán dựa trên các yếu tố khác nhau.

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

Để xóa các phong cách. thay vì thiết lập một cái gì đó như

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

Cách đơn giản sẽ là

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

Khi jquery thao tác các phần tử trên dom, các kiểu được ghi vào phần tử trong thuộc tính "style" như thể bạn đang viết kiểu nội tuyến. Tất cả bạn phải làm là xóa thuộc tính đó và mục sẽ đặt lại về kiểu ban đầu của nó

Hi vọng điêu nay co ich


4

tôi cũng có cùng một thăm dò, chỉ cần loại bỏ giá trị

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

2

Nếu bạn không muốn sử dụng các lớp (mà bạn thực sự cần), cách duy nhất để thực hiện những gì bạn muốn là bằng cách lưu các kiểu thay đổi trước:

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

// set style
// do your thing

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

2

Tôi đã sử dụng giải pháp thứ hai của user147767

Tuy nhiên, có một lỗi đánh máy ở đây. Nó nên

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

không <= 0

Tôi cũng đã thay đổi điều kiện này cho:

! curCssName.match (RegExp mới (cssName + "(-. +)?:"), "mi")

vì đôi khi chúng tôi thêm một thuộc tính css trên jQuery và nó được thêm vào theo một cách khác cho các trình duyệt khác nhau (tức là thuộc tính viền sẽ được thêm dưới dạng "viền" cho Firefox và "viền trên", "viền dưới", v.v. cho IE ).


1

Trước khi thêm một lớp, bạn nên kiểm tra xem nó đã có lớp với phương thức .hasClass () chưa

Đối với câu hỏi cụ thể của bạn. Bạn nên đặt công cụ của mình vào Biểu định kiểu xếp chồng. Đó là cách tốt nhất để phân tách thiết kế và chức năng.

Vì vậy, giải pháp đề xuất thêm và xóa tên lớp là cách thực hành tốt nhất.

tuy nhiên khi bạn thao túng các yếu tố, bạn không kiểm soát cách chúng được hiển thị. removeAttr ('style') là cách TỐT NHẤT để xóa tất cả các kiểu nội tuyến.


1

Tôi sửa đổi user147767 của giải pháp một chút để làm cho nó có thể sử dụng strings, arraysobjectsnhư là đầu vào:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.