Apakah ada cara mudah untuk menghapus semua kelas yang cocok, misalnya,
color-*
jadi jika saya memiliki elemen:
<div id="hello" class="color-red color-brown foo bar"></div>
setelah menghapus, itu akan menjadi
<div id="hello" class="foo bar"></div>
Terima kasih!
Jawaban:
Fungsi removeClass mengambil argumen fungsi sejak jQuery 1.4 .
Contoh langsung: http://jsfiddle.net/xa9xS/1409/
sumber
classes = ( value || "" ).match( rnotwhite ) || [];
sport-
,nav-
dancolor-
?*-color
?(color-|sport-|nav-)
. Itu akan cocokcolor-
, atausport-
, ataunav-
. Jadi, jawaban di atas akan menjadi/(^|\s)(color-|sport-|nav-)\S+/g
.sumber
c is undefined
)? Setidaknya ketika saya mencobanya di bawah ini di plugin saya di halaman ini,$('a').stripClass('post', 1)
melemparkan "TypeError: Tidak dapat memanggil metode 'ganti' yang tidak terdefinisi"$('div[class]')
hanya boleh mengembalikan elemen denganclass
, apakah mereka memiliki nilai atau tidak. skenario pengujian: jsfiddle.net/drzaus/m83mv.removeProp('class')
atau.className=undefined
filter[class]
masih mengembalikan sesuatu, mereka hanyaundefined
. Jadi secara teknis masih memiliki kelas (sebagai lawan dari.removeAttr('class')
, itulah sebabnya ia merusak fungsi Anda tetapi bukan varian saya. Jsfiddle.net/drzaus/m83mv/4return c && c.replace(/\bcolor-\S+/g, '');
Saya telah menulis sebuah plugin yang melakukan ini disebut alterClass - Hapus elemen kelas dengan pencocokan wildcard. Opsional tambahkan kelas: https://gist.github.com/1517285
sumber
Twitter Boostrap
kelas-kelas seperti ini:$(".search div").children('div').alterClass('span* row-fluid');
Saya telah menyamaratakan ini menjadi plugin Jquery yang menggunakan regex sebagai argumen.
Kopi:
Javascript:
Jadi, untuk kasus ini, penggunaannya adalah (Kopi dan Javascript):
Perhatikan bahwa saya menggunakan
Array.filter
fungsi yang tidak ada di IE <9. Anda dapat menggunakan fungsi filter Underscore sebagai gantinya atau Google untuk polyfill seperti ini WTFPL .sumber
Jika Anda ingin menggunakannya di tempat lain saya sarankan Anda ekstensi. Yang ini berfungsi dengan baik untuk saya.
Pemakaian:
sumber
kita bisa mendapatkan semua kelas dengan
.attr("class")
, dan ke Array, Dan loop & filter:demo: http://jsfiddle.net/L2A27/1/
sumber
var prefix='color';
dan diubah ...if (classArr[i].substr(0, prefix.length) != prefix)
Mirip dengan jawaban @ tremby , berikut adalah jawaban @ Kobi sebagai plugin yang akan cocok dengan awalan atau sufiks.
btn-mini
danbtn-danger
tetapi tidakbtn
kapanstripClass("btn-")
.horsebtn
dancowbtn
tetapi tidakbtn-mini
ataubtn
kapanstripClass('btn', 1)
Kode:
https://gist.github.com/zaus/6734731
sumber
endOrBegin
diperlukan. Itu tidak jelas. Apa yang sulit tentang menulis regex?/^match-at-start/
dan/match-at-end$/
diketahui oleh setiap pengembang JS. Tetapi masing-masing untuk dirinya sendiri.addClass
,removeClass
dantoggleClass
, yang dikenal untuk setiap pengembang jQuery. Apa yang sulit tentang membaca dokumentasi? ;)Untuk plugin jQuery coba ini
atau ini
sumber
Berdasarkan ARS81 's jawaban (yang hanya cocok nama kelas diawali dengan), inilah versi yang lebih fleksibel. Juga
hasClass()
versi regex.Pemakaian:
$('.selector').removeClassRegex('\\S*-foo[0-9]+')
sumber
Ini akan secara efektif menghapus semua nama kelas yang dimulai dengan
prefix
dariclass
atribut node . Jawaban lain tidak mendukung elemen SVG (saat penulisan ini), tetapi solusi ini tidak:sumber
RegExp
objek sekali, keluar dari setiap panggilan balik?Saya memiliki masalah yang sama dan muncul dengan berikut ini yang menggunakan metode _.filter garis bawah. Setelah saya menemukan bahwa removeClass mengambil fungsi dan memberi Anda daftar nama kelas, mudah untuk mengubahnya menjadi array dan memfilter nama kelas untuk kembali ke metode removeClass.
sumber
Anda juga bisa melakukan ini dengan JavaScript vanilla menggunakan Element.classList . Tidak perlu menggunakan ekspresi reguler juga:
function removeColorClasses(element) { for (let className of Array.from(element.classList)) if (className.startsWith("color-")) element.classList.remove(className); }
Catatan: Perhatikan bahwa kami membuat
Array
salinan dariclassList
sebelum memulai, itu penting karenaclassList
liveDomTokenList
yang akan diperbarui ketika kelas dihapus.sumber
Anda juga bisa menggunakan
className
properti objek DOM elemen:sumber
Fungsi generik yang menghapus kelas apa pun yang dimulai dengan
begin
:http://jsfiddle.net/xa9xS/2900/
sumber
Pemisahan regex pada batas kata
\b
bukan solusi terbaik untuk ini:atau sebagai mixin jQuery:
sumber
jika Anda memiliki lebih dari satu elemen yang memiliki nama kelas 'contoh', untuk menghapus kelas 'warna-' pada semuanya, Anda dapat melakukan ini: [menggunakan jquery]
jika Anda tidak memasukkan [a-z1-9 -] * di regex Anda, ia tidak akan menghapus kelas yang memiliki nomor atau '-' dalam namanya.
sumber
Jika Anda hanya perlu menghapus warna set terakhir, berikut ini mungkin cocok untuk Anda.
Dalam situasi saya, saya perlu menambahkan kelas warna ke tag tubuh pada acara klik dan menghapus warna terakhir yang telah ditetapkan. Dalam hal ini, Anda menyimpan warna saat ini, dan kemudian mencari tag data untuk menghapus warna set terakhir.
Kode:
Mungkin tidak persis apa yang Anda butuhkan, tetapi bagi saya itu dan ini adalah pertanyaan SO pertama yang saya lihat, jadi saya pikir saya akan membagikan solusi saya jika itu membantu siapa pun.
sumber
Cara alternatif untuk mendekati masalah ini adalah dengan menggunakan atribut data, yang pada dasarnya unik.
Anda telah mengatur warna elemen seperti:
$el.attr('data-color', 'red');
Dan Anda akan menggunakannya dalam css seperti:
[data-color="red"]{ color: tomato; }
Ini meniadakan kebutuhan untuk menggunakan kelas, yang memiliki efek samping dari keharusan untuk menghapus kelas lama.
sumber