Laman » Pengekodan » Memahami Model Objek Dokumen (DOM) dalam Butiran

    Memahami Model Objek Dokumen (DOM) dalam Butiran

    Kami semua telah mendengar tentang DOM, atau Model Objek Dokumen, yang akan disebutkan dari semasa ke semasa, berkaitan dengan JavaScript. DOM adalah konsep yang cukup penting dalam pembangunan web. Tanpa itu, kita tidak akan dapat mengubah suai laman HTML secara dinamik dalam pelayar.

    Belajar dan memahami hasil DOM dalam cara yang lebih baik mengakses, mengubah, dan memantau elemen yang berbeza dari halaman HTML. Model Objek Dokumen juga boleh membantu kami mengurangkan masa yang tidak diperlukan dalam masa pelaksanaan skrip.

    Struktur data pokok

    Sebelum bercakap mengenai apa yang DOM itu, bagaimana ia wujud, bagaimana ia wujud, dan apa yang berlaku di dalamnya, saya mahu anda tahu tentang pokok. Tidak jenis konifer & runcing tetapi mengenai pokok struktur data.

    Lebih mudah untuk memahami konsep struktur data jika kita memudahkan pengertiannya. Saya akan mengatakan, struktur data adalah kira-kira mengatur data anda. Ya, hanya susunan lama yang biasa, kerana anda akan mengatur perabot di rumah atau buku-buku anda di rak buku atau semua kumpulan makanan yang berbeza yang anda makan untuk di piring anda untuk menjadikannya bermakna kepada anda.

    Sudah tentu, itu tidak semua ada pada struktur data, tetapi itu cukup banyak di mana ia semua bermula. Ini “susunan” adalah di tengah-tengah semua itu. Ia cukup penting dalam DOM juga. Tetapi kami tidak bercakap tentang DOM lagi, jadi biarkan saya memandu anda ke arah a struktur data yang mungkin anda kenal dengan: array.

    Arrays & trees

    Array mempunyai Indeks dan panjang, mereka boleh jadi pelbagai dimensi, dan mempunyai lebih banyak ciri. Sebanyak yang penting adalah untuk mengetahui perkara-perkara ini mengenai array, janganlah mengganggu diri kita sekarang. Kepada kami, array sangat mudah. Ia adalah ketika anda mengaturkan perkara yang berbeza dalam satu baris.

    Begitu juga, apabila memikirkan pokok-pokok, katakan, ia tentang meletakkan perkara di bawah satu sama lain, bermula dengan hanya satu perkara di bahagian atas.

    Sekarang, anda mungkin mengambil itik talian tunggal dari sebelumnya, tolong tegak, dan beritahu saya itu “sekarang, setiap itik berada di bawah itik lain”. Adakah pokok itu? Ia adalah.

    Bergantung pada data anda atau bagaimana anda akan menggunakannya, data teratas dalam pokok anda (dipanggil akar) mungkin sesuatu yang ada sangat penting atau sesuatu yang ada di sana sahaja melampirkan unsur-unsur lain di bawahnya.

    Sama ada cara, elemen paling atas dalam struktur data pokok melakukan sesuatu yang sangat penting. Ia menyediakan tempat untuk mula mencari apa-apa maklumat yang kita mahu ekstrak dari pokok itu.

    Makna DOM

    DOM bermaksud Model Objek Dokumen. Dokumen itu menunjuk kepada dokumen HTML (XML) iaitu diwakili sebagai Objek. (Dalam semua JavaScript boleh diwakili sebagai objek!)

    Model ini dicipta oleh penyemak imbas yang mengambil dokumen HTML dan mencipta objek yang mewakilinya. Kami boleh mengakses objek ini dengan JavaScript. Dan sejak kita menggunakan objek ini untuk memanipulasi dokumen HTML dan membina aplikasi kita sendiri, DOM pada dasarnya adalah API.

    Pokok DOM

    Dalam kod JavaScript, dokumen HTML adalah diwakili sebagai objek. Semua data yang dibaca dari dokumen itu juga disimpan sebagai objek, bersarang di bawah satu sama lain (kerana seperti yang saya katakan sebelum ini, dalam JavaScript segala-galanya hanya boleh diwakili sebagai objek).

    Oleh itu, ini pada dasarnya adalah susunan fizikal data DOM dalam kod: semuanya adalah disusun sebagai objek. Walau bagaimanapun, secara logiknya, ia adalah pokok.

    Parser DOM

    Setiap perisian pelayar mempunyai program yang dipanggil Parser DOM yang bertanggungjawab menyusun dokumen HTML ke dalam DOM.

    Pelayar membaca halaman HTML dan menghidupkan datanya menjadi objek yang membentuk DOM. Maklumat yang terdapat dalam objek JavaScript JavaScript ini diatur secara logik sebagai pokok struktur data yang dikenali sebagai pokok DOM.

    Parsing data dari HTML ke pokok DOM

    Ambil fail HTML mudah. Ia mempunyai elemen akar . Ia sub-unsur adalah dan , masing-masing mempunyai banyak elemen kanak-kanak sendiri.

    Jadi pada asasnya, penyemak imbas membaca data dalam dokumen HTML, sesuatu yang serupa dengan ini:

           

    Dan, mengatur mereka ke dalam pokok DOM seperti ini:

    Perwakilan setiap elemen HTML (dan kandungan kepunyaannya) dalam pokok DOM dikenali sebagai Nod. The nod akar adalah nod dari .

    The Antara muka DOM dalam JavaScript dipanggil dokumen (kerana ia adalah perwakilan dokumen HTML). Oleh itu, kita mengakses pohon DOM dokumen HTML melalui dokumen antara muka dalam JavaScript.

    Kita bukan sahaja dapat mengakses, tetapi juga memanipulasi dokumen HTML melalui DOM. Kita boleh menambah elemen ke laman web, mengalih keluar & mengemas kini mereka. Setiap kali kita menukar atau mengemas kini sebarang nod dalam pokok DOM, ia mencerminkan pada halaman web.

    Bagaimana nod direka

    Saya telah menyebut sebelum ini bahawa setiap sekeping data dari dokumen HTML adalah disimpan sebagai objek dalam JavaScript. Jadi, bagaimana data disimpan sebagai objek boleh diatur secara logik sebagai pokok?

    Nod dari pokok DOM mempunyai ciri atau sifat tertentu. Hampir setiap nod dalam pokok mempunyai nod induk (nod yang betul di atasnya), nod kanak-kanak (nod di bawahnya) dan adik-beradik (nod lain yang dimiliki oleh ibu bapa yang sama). Mempunyai ini keluarga di atas, di bawah, dan di sekitar nod adalah apa yang layak sebagai sebahagian daripada pokok.

    Maklumat keluarga setiap nod adalah disimpan sebagai sifat dalam objek yang mewakili simpul itu. Sebagai contoh, kanak-kanak adalah harta nod yang membawa senarai elemen kanak-kanak node itu, dengan itu secara logiknya menyusun unsur-unsur anaknya di bawah nod.

    Elakkan mengatasi manipulasi DOM

    Seperti yang kita dapati mengemas kini penggunaan DOM (untuk mengubah suai laman web), ada perkara seperti itu berlebihan.

    Katakanlah, anda mahu mengemas kini warna a

    pada halaman web menggunakan JavaScript. Apa yang perlu anda lakukan ialah mengakses objek nod DOM yang sepadan dan kemas kini harta warna. Ini tidak boleh menjejaskan seluruh pokok (nod lain di dalam pokok).

    Tetapi, bagaimana jika anda mahu keluarkan simpul dari pokok atau tambah satu untuk itu? Seluruh pokok mungkin perlu disusun semula, dengan nod dikeluarkan atau ditambah ke pokok. Ini adalah pekerjaan yang mahal. Ia memerlukan masa dan sumber penyemak imbas untuk menyelesaikan tugas ini.

    Sebagai contoh, katakan, anda mahu tambah lima baris tambahan ke meja. Untuk setiap baris, apabila nod baru dibuat dan ditambah ke DOM, pokok dikemas kini setiap kali, menambah sehingga lima jumlah kemas kini secara keseluruhan.

    Kita boleh mengelakkan ini dengan menggunakan DocumentFragment antara muka. Fikirkannya sebagai kotak yang boleh memegang semua lima baris dan ditambah ke pokok itu. Dengan cara ini, lima baris ditambah sebagai satu data tunggal dan tidak satu demi satu, yang membawa hanya satu kemas kini dalam pokok itu.

    Ini tidak hanya berlaku apabila kita mengeluarkan atau menambah elemen, tetapi mengubah saiz elemen juga boleh mempengaruhi nod lain, kerana elemen saiz mungkin memerlukan unsur-unsur lain di sekelilingnya menyesuaikan saiz mereka. Oleh itu, nod-nod yang sepadan bagi semua elemen lain perlu dikemas kini dan elemen HTML akan diberikan lagi mengikut peraturan baru.

    Begitu juga, apabila susun atur halaman web secara keseluruhannya terjejas, sebahagian atau seluruh halaman web mungkin diberikan semula. Ini adalah proses yang dikenali sebagai Reflow. Untuk elakkan reflow berlebihan pastikan anda tidak menukar DOM terlalu banyak. Perubahan ke DOM bukanlah satu-satunya perkara yang boleh menyebabkan Reflow di laman web. Bergantung kepada penyemak imbas, faktor lain juga boleh menyumbang kepadanya.

    Mengakhiri

    Membungkus perkara, DOM adalah divisualisasikan sebagai pokok terdiri daripada semua elemen yang terdapat dalam dokumen HTML. Secara fizikal (sebagai fizikal seperti apa-apa digital boleh mendapatkan), ia adalah a set objek JavaScript bersarang yang sifat dan kaedahnya memegang maklumat yang memungkinkan secara logik menyusunnya ke dalam pokok.