Saya mencoba untuk mendapatkan rentang anak yang memiliki kelas = 4. Berikut adalah contoh elemen:
<div id="test">
<span class="one"></span>
<span class="two"></span>
<span class="three"></span>
<span class="four"></span>
</div>
Alat yang saya miliki adalah JS dan YUI2. Saya dapat melakukan sesuatu seperti ini:
doc = document.getElementById('test');
notes = doc.getElementsByClassName('four');
//or
doc = YAHOO.util.Dom.get('#test');
notes = doc.getElementsByClassName('four');
Ini tidak berfungsi di IE. Saya mendapatkan kesalahan bahwa objek (doc) tidak mendukung metode atau properti ini (getElementsByClassName). Saya sudah mencoba beberapa contoh implementasi lintas browser dari getElementsByClassName tapi saya tidak bisa membuatnya bekerja dan masih mendapatkan kesalahan itu.
Saya pikir apa yang saya butuhkan adalah browser lintas getElementsByClassName atau saya perlu menggunakan doc.getElementsByTagName ('span') dan loop melalui sampai saya menemukan kelas 4. Saya tidak yakin bagaimana melakukannya.
javascript
yui
spyderman4g63
sumber
sumber
querySelectorAll
didukung oleh IE 8+ sedangkangetElementsByClassName
hanya didukung oleh IE 9+. Jika Anda dapat menjatuhkan IE 7, Anda aman digunakanquerySelectorAll('.4')
. Omong-omong,4
adalah nama kelas yang tidak valid.document.querySelectorAll
adalah DOM dan tidak ada hubungannya dengan YUIJawaban:
Gunakan
doc.childNodes
untuk beralih melalui masing-masingspan
, dan kemudian filter yangclassName
sama4
:
sumber
className
seperti ini: diif(doc.childNode[i].className.match("\s*" + search_class + "\s*")
mana variabelsearch_class
adalah nama kelas yang Anda cari.Gunakan querySelector dan querySelectorAll
IE9 dan yang lebih tinggi
;)
sumber
Jawaban yang diterima hanya memeriksa anak langsung. Seringkali kita mencari keturunan dengan nama kelas itu.
Juga, kadang-kadang kita menginginkan anak yang mengandung className.
Sebagai contoh:
<div class="img square"></div>
harus cocok dengan pencarian di className "img", meskipun itu benar className bukan "img".Inilah solusi untuk kedua masalah ini:
Temukan instance pertama elemen turunan dengan kelas
className
sumber
Gunakan element.querySelector (). Mari kita asumsikan: 'myElement' adalah elemen induk yang sudah Anda miliki. 'sonClassName' adalah kelas anak yang Anda cari.
Untuk info lebih lanjut, kunjungi: https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelector
sumber
let child = myElement.querySelector('sonClassName');
dalam kasus sayaKamu bisa mencoba:
atau
sumber
Bagi saya sepertinya Anda menginginkan rentang keempat. Jika demikian, Anda bisa melakukan ini:
atau
Yang terakhir ini memastikan bahwa tidak ada node tersembunyi yang dapat mengacaukannya.
sumber
TagName
itu dia! Sangat sederhana..firstChild
dan.firstChildElement
meskipunNamun ketahuilah bahwa browser lama tidak mendukung
getElementsByClassName
.Lalu, Anda bisa melakukannya
Tampaknya ini berfungsi, tetapi perlu diperhatikan bahwa kelas HTML
sumber
Gunakan nama id dengan
getElementById
, tanpa#
tanda sebelum itu. Kemudian Anda bisa mendapatkanspan
simpul anak menggunakangetElementsByTagName
, dan loop melalui mereka untuk menemukan satu dengan kelas yang tepat:Demo: http://jsfiddle.net/Guffa/xB62U/
sumber
getElementsByTagName
Metode ini bekerja di IE 8. Ini didukung sejauh IE 5.5. developer.mozilla.org/en-US/docs/DOM/…Menurut pendapat saya, setiap kali Anda bisa, Anda harus menggunakan Array dan metodenya. Mereka jauh, jauh lebih cepat daripada perulangan seluruh DOM / pembungkus, atau mendorong barang ke array kosong. Sebagian besar solusi yang disajikan di sini Anda dapat menghubungi Naif seperti yang dijelaskan di sini (artikel hebat btw):
https://medium.com/@chuckdries/traversing-the-dom-with-filter-map-and-arrow-functions-1417d326d2bc
Solusi saya : (pratinjau langsung tentang Codepen: https://codepen.io/Nikolaus91/pen/wEGEYe )
sumber
Cara saya akan melakukan ini menggunakan jquery adalah sesuatu seperti ini ..
sumber
Berikut ini adalah solusi rekursif yang relatif sederhana. Saya pikir pencarian luas-pertama cocok di sini. Ini akan mengembalikan elemen pertama yang cocok dengan kelas yang ditemukan.
sumber
Anda dapat mengambil kelas induk dengan menambahkan baris di bawah ini. Jika Anda memiliki id, akan lebih mudah dengan
getElementById
. Meskipun begitu,Kemudian Anda dapat menggunakan
querySelectorAll
pada induk<div>
untuk mengambil semua kecocokandiv
dengan kelas.progress__marker
querySelectorAll
akan mengambil setiapdiv
dengan kelasprogress__marker
sumber
Solusi modern
dokumentasi
sumber
Juni 2018 memperbarui ke ES6
sumber
YUI2 memiliki implementasi lintas browser
getElementsByClassName
.sumber
getElementsByClassName
adalah metodeYAHOO.util.Dom
. Dalam kasus Anda, panggilan akan terlihat sepertiYAHOO.util.Dom.getElementsByClassName('four', 'span', 'test')
. Anda mungkin harus membaca dokumen untuk mendapatkan pemahaman yang lebih terperinci tentang apa yang dilakukan panggilan itu. Versi pendek adalah bahwa sekarang akan mencarispan
elemen dengan kelasfour
bawah elemen DOM dengantest
sebagai yangid
.get
panggilan hanya elemen DOM. YUI tidak mengambil pendekatan seluruh penjualan 'membungkus semuanya dalam kerangka-objek khusus' yang dilakukan oleh sesuatu seperti jQuery, juga tidak melakukan patch-patch objek asli seperti Prototype (apakah? Saya belum mengacaukan w / Protoype selamanya). Dalam hal ini, YUI lebih seperti Dojo.Ini adalah bagaimana saya melakukannya menggunakan penyeleksi YUI. Terima kasih atas saran Hank Gay.
di mana empat = classname, span = jenis elemen / nama tag, dan test = id induk.
sumber
Gunakan
YAHOO.util.Dom.getElementsByClassName()
dari sini .sumber