Hapus CSS dari Div menggunakan JQuery

169

Saya baru mengenal JQuery. Di Aplikasi saya, saya memiliki yang berikut ini:

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

Ketika saya mengklik Div, warna Div itu berubah. Di dalam fungsi Klik itu saya memiliki beberapa fungsi yang harus dilakukan. Setelah semua itu saya ingin menghapus Css yang diterapkan dari Div. Bagaimana saya bisa melakukannya di JQuery?

useranon
sumber
nak, Anda sudah membuka sekaleng cacing!
Pinch

Jawaban:

163

Masukkan properti CSS Anda ke dalam kelas, lalu lakukan sesuatu seperti ini:

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

Lalu di mana 'fungsi lain' Anda melakukan sesuatu seperti:

$("#myButton").click(function(){
   $("#displayPanel div").removeClass('someClass');
});
karim79
sumber
3
@Aruna: Saya sedikit yang takut sekarang - bagaimana yang Anda menempatkan gaya pada elemen? Jika CSS Anda tidak ada dalam stylesheet / blok, itu bukan CSS.
annakata
8
@annakata: Tentu saja ... <div style="xxx"/>masih CSS ... itu bukan cara yang sangat baik untuk melakukannya, tetapi itu berhasil.
buka
127
Jawaban ini tidak membantu semua kasus di mana Anda memodifikasi sesuatu dengan cepat untuk melakukan animasi atau rendering kompleks. Pertanyaannya bukan tentang bagaimana mengatur CSS, tetapi bagaimana menghapus opsi CSS.
FMaz008
5
@ FMaz008 - Animasi dan rendering yang rumit jauh melebihi apa yang dia tanyakan. Baca pertanyaan: "... Bagaimanapun juga saya ingin menghapus Css yang diterapkan dari Div". Jadi dia bisa menggunakan addClassatau removeClassatau removeAttr('style')dalam jawaban @ ToRrEs.
karim79
1
Meskipun di bawah ini bekerja untuk saya juga, saya merasa ini adalah solusi terbaik karena saya lebih suka melakukan SEMUA gaya atau setidaknya sebanyak mungkin di stylesheet saya. Saya akhirnya melakukan hal-hal seperti ini.
LondonGuy
307

Anda dapat menghapus css tertentu yang ada di elemen seperti ini:

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

Meskipun saya setuju dengan karim bahwa Anda mungkin harus menggunakan kelas CSS.

thatismatt
sumber
Itu akan menghapus pengaturan sebelumnya untuk warna latar belakang dan font-weight
Philippe Leybaert
@Dave bekerja dengan indah di IE7 bagi saya untuk menghapus gaya yang diterapkan langsung pada elemen , bukan untuk menghapus gaya yang diterapkan melalui kelas css.
ErikE
Masalahnya adalah ketika mengatur latar belakang ke '', IE7 dengan senang hati menambahkan default untuk semua properti background- * yang berbeda. Yang berarti bahwa jika Anda memiliki properti background- * diatur sebaliknya (melalui kelas, misalnya) mereka akan dibersihkan dengan ini. Saya harus berurusan dengan masalah khusus ini dalam produk kami.
Dave Van den Eynde
Bekerja dengan baik untuk saya meskipun saya akhirnya menggunakan addClass karena styling harus dilakukan dalam stylesheet. Saya pribadi suka mengatur semuanya.
Beli
Perhatikan bahwa ini BUKAN sama dengan $ element.css ('top', '') ;, yang tidak menghapus gaya. Anda harus memasukkan sebuah objek: $ element.css ({'top:' '});
Tom McKenzie
223

Anda bisa menggunakan metode removeAttr, jika Anda ingin menghapus semua gaya inline yang Anda tambahkan secara manual dengan javascript. Lebih baik menggunakan kelas CSS tetapi Anda tidak pernah tahu.

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

jeroen.verhoest
sumber
18
Ini adalah solusi yang lebih baik daripada menggunakan kelas tambahan, +1.
o15a3d4l11s2
6
Jawaban yang bagus - .css('style-name', 'style-value')Fungsi jQuery menambahkan gaya inline ke elemen - dan sangat penting untuk memperbarui gaya dengan cepat. Skrip seret / lepas dapat mengubah topdan leftgaya elemen yang diposisikan benar-benar - contoh di mana menggunakan kelas tidak praktis.
leepowers
Itu lebih baik daripada opsi lain karena kita hanya perlu menghapus gaya.
gautamlakum
4
Sama seperti menambahkan bahwa chrome tidak akan menangani ini dengan benar seperti yang terlihat di sini opsi yang lebih aman akan menggunakan `attr ('style', '').
Andrew
Jawaban yang bagus Selama Anda yakin hanya memiliki CSS sebaris yang ingin Anda hapus setelah ini dieksekusi (seperti yang sering terjadi pada animasi), maka inilah cara yang harus dilakukan.
Jacob Stamm
40

Anda dapat menghapus properti sebaris dengan cara ini:

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

Sebagai contoh:

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

Ini pada dasarnya disebutkan di atas, dan pasti berhasil.

BTW, ini berguna dalam kasus seperti ketika Anda perlu menghapus status setelah animasi. Tentu saya bisa menulis setengah lusin kelas untuk menangani ini, atau saya bisa menggunakan kelas dasar saya dan #id melakukan beberapa matematika, dan menghapus gaya sebaris yang diterapkan animasi.

$(actpar).animate({top:0, opacity:1, duration:500}, function() {
   $(this).css({'top':'', 'opacity':''});
});
Chad
sumber
hanya sesuatu yang saya cari, menghilangkan gaya inline .. terima kasih
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.

*/

ATAU

//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(";"));
        });
    }
});
kebiruan
sumber
Apakah ada cara kita dapat menghapus semua properti css dengan ini?
Simon Arnold
Saya mencoba yang pertama dan berhasil dengan baik! Untuk semua pemula yang mungkin tidak tahu: css ('attr', '') tidak sama dengan menghapus attr itu!
Anonim
7

Sebagai catatan, tergantung pada properti Anda mungkin dapat mengaturnya ke otomatis.

Jeff Davis
sumber
5

Tetapkan nilai default, misalnya:

$ (ini) .css ("height", "auto");

atau dalam hal fitur CSS lainnya

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

somid3
sumber
5

Sebenarnya cara terbaik yang saya temukan untuk melakukan ini ketika harus melakukan styling berbasis jquery kompleks, misalnya, jika Anda memiliki modal yang perlu Anda tampilkan tetapi perlu menghitung offset halaman untuk mendapatkan parameter yang benar yang perlu dimasukkan ke dalam fungsi a jQuery ("x"). css ({}).

Jadi di sini adalah pengaturan gaya, output dari variabel yang dihitung berdasarkan berbagai faktor.

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

Untuk menghapus gaya-gaya itu. daripada mengatur sesuatu seperti

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

Cara sederhananya

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

Ketika jquery memanipulasi elemen pada dom, style ditulis ke elemen dalam atribut "style" seolah-olah Anda sedang menulis style inline. Yang harus Anda lakukan adalah menghapus atribut itu dan item tersebut harus diatur ulang ke gaya aslinya

Semoga ini membantu

pengguna3198542
sumber
4

saya punya masalah yang sama juga, cukup hapus nilai

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

Jika Anda tidak ingin menggunakan kelas (yang memang harus Anda lakukan), satu-satunya cara untuk mencapai apa yang Anda inginkan adalah dengan menyimpan gaya perubahan terlebih dahulu:

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

// set style
// do your thing

$(this).css("font-size",oldFontSize);
// etc...
Philippe Leybaert
sumber
2

Saya menggunakan solusi kedua dari user147767

Namun, ada salah ketik di sini. Harus

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

bukan <= 0

Saya juga mengubah kondisi ini untuk:

! curCssName.match (RegExp baru (cssName + "(-. +) ?:"), "mi")

seperti kadang-kadang kita menambahkan properti css di atas jQuery, dan itu ditambahkan dengan cara yang berbeda untuk browser yang berbeda (yaitu properti perbatasan akan ditambahkan sebagai "perbatasan" untuk Firefox, dan "batas atas", "batas bawah" dll untuk IE ).

kelinci putih
sumber
1

Sebelum menambahkan kelas Anda harus memeriksa apakah sudah ada kelas dengan metode .hasClass ()

Untuk pertanyaan spesifik Anda. Anda harus meletakkan barang-barang Anda di Cascading Stylesheet. Ini praktik terbaik untuk memisahkan desain dan fungsionalitas.

jadi solusi yang diusulkan untuk menambah dan menghapus nama kelas adalah praktik terbaik.

namun ketika Anda memanipulasi elemen, Anda tidak bisa mengontrol bagaimana elemen itu diberikan. removeAttr ('style') adalah cara TERBAIK untuk menghapus semua gaya inline.

PDA
sumber
1

Saya memodifikasi solusi user147767 sedikit agar memungkinkan untuk digunakan strings, arraysdan objectssebagai input:

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

yaart
sumber