3
Saya kadang -kadang terkejut dengan hakikat bahawa koleksi unsur -unsur DOM (lebih formal dipanggil nodelis) tidak boleh dimanipulasi seperti array, kerana ia bukan satu. Walau bagaimanapun, ia kelihatan seperti satu, dan memikirkan ia adalah satu kesilapan yang dibuat begitu kerap oleh orang -orang baru JavaScript bahawa untuk rujukan JavaScript yang akan datang, saya merasakan perlu untuk diperhatikan perkara ini untuk setiap
objek yang, atau mengembalikan, koleksi.
Tetapi anda tidak boleh menggunakan kaedah array seperti push (), splice () atau terbalik () untuk memanipulasinya. Kecuali anda boleh, jika anda mengambil langkah seterusnya dan menukarnya menjadi array. Ini sebenarnya remeh:
Kod di atas adalah penyemak imbas sepenuhnya, dan dipanggil dengan koleksi asal sebagai hujah:
for(var i=0; i<collection.length; i++) { //whatever }
Walau bagaimanapun, jika anda hanya perlu berurusan dengan penyemak imbas yang menyokong prototaip objek asli (Opera, Firefox dan Safari 3) maka anda hanya boleh membuat kaedah ToArray () nodelist:
function collectionToArray(collection) { var ary = []; for(var i=0, len = collection.length; i < len; i++) { ary.push(collection[i]); } return ary; }
var elements = collectionToArray(document.getElementsByTagName('*'));
let collection = document.getElementsByTagName ('div');
biarkan array = array.from (koleksi); bukan tatasusunan. Walau bagaimanapun, anda boleh menukar koleksi ke array menggunakan array.From () atau pengendali penyebaran, dan kemudian gunakan kaedah array pada array yang dihasilkan. Mereka menyediakan pautan langsung ke DOM, yang bermaksud bahawa jika DOM berubah, koleksi itu dikemas kini secara automatik. Ini adalah sesuatu yang tidak dapat dilakukan oleh array. Walau bagaimanapun, tatasusunan mempunyai lebih banyak kaedah terbina dalam untuk memanipulasi data, jadi mereka sering lebih mudah untuk tugas manipulasi data.let collection = document.getElementsByTagName ('div');
biarkan array = [... koleksi]; Ini bermakna jika elemen ditambah atau dikeluarkan dari DOM, koleksi itu dikemas kini secara automatik untuk mencerminkan perubahan ini. Koleksi statik, sebaliknya, tidak mengemaskini apabila DOM berubah. Sebaik sahaja ia dicipta, ia tetap sama tanpa mengira perubahan pada dom. Koleksi hanya dibaca. Walau bagaimanapun, anda boleh mengubah suai elemen DOM yang koleksi itu berdasarkan, yang seterusnya akan mengemas kini koleksi jika ia adalah koleksi langsung. Walau bagaimanapun, anda boleh menukar koleksi ke array menggunakan array.from () atau pengendali penyebaran, dan kemudian gunakan foreach pada array yang dihasilkan.Atas ialah kandungan terperinci Koleksi bukanlah pelbagai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!