Apakah ada cara di jQuery untuk mengulang atau menetapkan ke array semua kelas yang ditugaskan ke suatu elemen?
ex.
<div class="Lorem ipsum dolor_spec sit amet">Hello World!</div>
Saya akan mencari kelas "khusus" seperti pada "dolor_spec" di atas. Saya tahu bahwa saya bisa menggunakan hasClass () tetapi nama kelas yang sebenarnya mungkin belum diketahui pada saat itu.
javascript
jquery
html
Buggabill
sumber
sumber
Jawaban:
Anda dapat menggunakan
document.getElementById('divId').className.split(/\s+/);
untuk memberi Anda array nama kelas.Kemudian Anda dapat beralih dan menemukan yang Anda inginkan.
jQuery tidak benar-benar membantu Anda di sini ...
sumber
$.fn.classList = function() {return this[0].className.split(/\s+/);};
if ($.inArray("someclass",classList)>=0) { /* hasClass someclass*/ }
Mengapa tidak ada yang terdaftar.
EDIT: Seperti yang ditunjukkan oleh @MarkAmery, Anda tidak bisa hanya
.split(' ')
karena nama kelas dapat dipisahkan oleh segala jenis spasi putih.sumber
$('<div class="foo bar baz">').attr("class").split(' ')
ke konsol browser Anda (ada karakter tab di sana); Anda akan mendapatkan["foo", "bar baz"]
alih-alih daftar kelas yang benar["foo", "bar", "baz"]
.class="foo <lots of spaces here> bar"
, Anda akan berakhir dengan array dengan elemen string kosong.Pada browser pendukung, Anda dapat menggunakan
classList
properti elemen DOM .Ini adalah objek mirip array yang mencantumkan semua kelas yang dimiliki elemen.
Jika Anda perlu mendukung versi browser lama yang tidak mendukung
classList
properti, halaman MDN tertaut juga menyertakan shim untuk itu - meskipun bahkan shim tidak akan bekerja pada versi Internet Explorer di bawah IE 8.sumber
.classList
bukan array yang benar, dan metode seperti.indexOf(⋯)
itu tidak berfungsi. Ini hanya "objek seperti array", sedangkan.className.split(/\s+/).indexOf(⋯)
(dari jawaban yang diterima) berfungsi.Array
menggunakan[...iterable]
atauArray.from(iterable)
Ini adalah plugin jQuery yang akan mengembalikan array dari semua kelas yang dimiliki elemen yang cocok
Gunakan seperti
Dalam kasus Anda kembali
Anda juga dapat melewatkan fungsi ke metode yang akan dipanggil pada setiap kelas
Ini adalah jsFiddle yang saya atur untuk menunjukkan dan menguji http://jsfiddle.net/GD8Qn/8/
Javascript yang diperkecil
sumber
Anda harus mencoba yang ini:
Ini mengembalikan array dari semua kelas elemen saat ini.
sumber
.classList
adalah solusinya - Anda hanya perlu memperhatikan inkonsistensi dan / atau dukungan browser yang hilang ...classList
yang berfungsi cukup baik di browser modernclassList
properti tidak berfungsi pada IE 10/11 untuk elemen SVG (meskipun berfungsi untuk elemen HTML). Lihat developer.mozilla.org/en-US/docs/Web/API/Element/classListsumber
Memperbarui:
Seperti yang ditunjukkan oleh @Ryan Leonard dengan benar, jawaban saya tidak benar-benar memperbaiki poin yang saya buat sendiri ... Anda harus memotong dan menghapus spasi ganda dengan (misalnya) string.replace (/ + / g, "") .. Atau Anda dapat memisahkan el.className dan kemudian menghapus nilai kosong dengan (misalnya) arr.filter (Boolean).
atau lebih modern
Tua:
Dengan semua jawaban yang diberikan, Anda tidak boleh lupa untuk pengguna .trim () (atau $ .trim ())
Karena kelas ditambahkan dan dihapus, dapat terjadi bahwa ada beberapa spasi di antara string kelas .. misalnya 'class1 class2 class3' ..
Ini akan berubah menjadi ['class1', 'class2', '', '', '', 'class3'] ..
Saat Anda menggunakan trim, semua banyak ruang dihapus ..
sumber
.classList
adalah pendekatan yang jauh lebih bersih!sumber
.map
; gunakan.each
jika Anda tidak perlu.map
nilai pengembalian. Membagi spasi daripada spasi putih juga rusak - lihat komentar saya di stackoverflow.com/a/10159062/1709587 . Bahkan jika tidak ada dari poin-poin ini yang benar, ini tidak menambahkan apa pun yang baru ke halaman. -1!Mungkin ini dapat membantu Anda juga. Saya telah menggunakan fungsi ini untuk mendapatkan kelas elemen childern ..
Dalam kasus Anda, Anda ingin kelas doler_ipsum yang dapat Anda lakukan seperti ini sekarang
calsses[2];
.sumber
Terima kasih untuk ini - saya mengalami masalah yang sama, karena saya mencoba menghubungkan objek secara terprogram akan nama-nama kelas hierarkis, meskipun nama-nama itu mungkin tidak diketahui oleh skrip saya.
Dalam skrip saya, saya ingin
<a>
tag untuk mengaktifkan / menonaktifkan teks bantuan dengan memberikan<a>
tag[some_class]
plus kelasnyatoggle
, dan kemudian memberikan teks bantuannya kelas[some_class]_toggle
. Kode ini berhasil menemukan elemen terkait menggunakan jQuery:sumber
Coba ini. Ini akan memberi Anda nama semua kelas dari semua elemen dokumen.
});
Berikut ini contoh kerjanya: https://jsfiddle.net/raju_sumit/2xu1ujoy/3/
sumber
Saya punya masalah serupa, untuk elemen tipe gambar. Saya perlu memeriksa apakah elemen itu dari kelas tertentu. Pertama saya mencoba dengan:
tapi saya mendapat "fungsi ini tidak tersedia untuk elemen ini".
Kemudian saya memeriksa elemen saya di DOM explorer dan saya melihat atribut yang sangat bagus yang bisa saya gunakan: className. Isinya nama semua kelas elemen saya yang dipisahkan oleh spasi kosong.
Setelah Anda mendapatkannya, cukup pisahkan string seperti biasa.
Dalam kasus saya ini berhasil:
Saya berasumsi ini akan bekerja dengan jenis elemen lain (selain img).
Semoga ini bisa membantu.
sumber
javascript menyediakan atribut classList untuk elemen simpul di dom. Cukup menggunakan
akan mengembalikan objek bentuk
Objek memiliki fungsi seperti berisi, menambah, menghapus yang dapat Anda gunakan
sumber
Agak terlambat, tetapi menggunakan fungsi extended () memungkinkan Anda memanggil "hasClass ()" pada elemen apa pun, misalnya:
var hasClass = $('#divId').hasClass('someClass');
sumber
Pertanyaannya adalah apa yang dirancang untuk dilakukan Jquery.
Dan mengapa tidak ada yang memberikan .find () sebagai jawaban?
Ada juga classList untuk browser non-IE:
sumber
Ini dia, hanya tweak jawaban readsquare untuk mengembalikan array semua kelas:
Lewati elemen jQuery ke fungsi, sehingga panggilan sampel adalah:
sumber
$(elem).attr('class').split(/\s+/)
. Mungkin saya salah, tetapi saya tidak melihat alasan untuk beralih melalui koleksi, menyalin konten ke koleksi baru dan mengembalikan koleksi baru itu.Saya tahu ini adalah pertanyaan lama tapi tetap saja.
Jika Anda ingin memanipulasi elemen
Jika Anda ingin memeriksa apakah elemen memiliki kelas
jika banyak kelas
sumber