Pertanyaan Apa perbedaan dalam tingkat DOM, dan bagaimana mereka saling berhubungan?


Saya sering mendengar tentang "level DOM 1", "level DOM 2", "level DOM 3", dan "level DOM 4" dan menyadari bahwa saya tidak tahu perbedaan antara mereka atau bagaimana mereka berhubungan satu sama lain.

Saya tahu dasar-dasarnya - DOM adalah Document Object Model, dan yang menyediakan akses untuk bahasa scripting (terutama, tetapi sejauh yang saya tahu, tidak terbatas pada berbagai versi ECMAScript, seperti ECMAScript 5.1) untuk mengakses elemen-elemen dokumen HTML. (Beberapa situs yang saya baca - seperti pengantar dom pada quirksmode - Katakan bahwa itu untuk dokumen XML apa pun, tetapi HTML adalah subset yang cukup.)

Tanggal pada laporan teknis DOM w3c tampaknya menyiratkan bahwa setiap tingkat DOM berikutnya menggantikan yang sebelumnya.

Sayangnya, referensi terbaik yang saya temukan untuk memberikan klarifikasi telah terjadi wikipedia, yang tampaknya mengatakan hal yang sama - bagian Standardisasi mengatakan tingkat berikutnya "menambahkan" fungsi tambahan, sementara tidak menyebutkan menghapus apa pun.

Sekarang, untuk pertanyaan saya, yang mungkin kebakaran cepat, tetapi mudah-mudahan mengungkapkan keadaan umum ketidaktahuan saya:

  • Apa hubungan antara satu level DOM dengan yang lain?
  • Apakah tingkat yang lebih rendah dari DOM menyelesaikan subset dari DOM tingkat yang lebih tinggi? Apakah ada fungsi yang dihapus karena tingkat DOM meningkat? Ketika saya melihat pernyataan seperti The level 1 DOM will work fine on an HTML document dan In the Level 1 DOM, each object, whatever it may be exactly, is a Node (keduanya dari intro quirksmode), apakah ini menyiratkan bahwa pernyataan tersebut benar untuk level 2, 3 dan 4? (Ini semua adalah pertanyaan yang sama, hanya ditanyakan berbagai cara)
  • Apakah mengutip tingkat DOM benar-benar lebih dari sekadar cara singkat tentang seberapa modern seorang agen pengguna harus untuk fungsi tertentu agar berfungsi?

Tentunya, saya dapat mempelajari setiap spesifikasi dari laporan teknis DOM w3c, tetapi berharap mendapatkan jawaban dari mereka yang memiliki pengalaman tangan pertama. Hanya dengan melirik ke bagian perubahan spesifikasi untuk level DOM 3Saya melihat bahwa sebagian besar perubahan dari 2 hingga 3 adalah tambahan, meskipun beberapa implementasi kunci dalam antarmuka Node telah berubah. Apakah perubahan ini merusak segalanya?

Saya ingin melakukan lebih dari sekedar mengangguk dengan aneh saat seseorang memberi tahu saya, "Oh, itu DOM level 2, jadi tidak apa-apa," jadi akan menyambut setiap referensi yang saya lewatkan atau informasi langsung yang tidak saya pahami dari penelitian saya .


18
2017-12-02 17:17


asal


Jawaban:


Pertama, saya akan menghubungkan pesan dari Luluhan MDN dari level DOM (penekanan dalam aslinya):

DOM digunakan untuk ditulis sebagai satu set level. Itu bukan lagi kasusnya. Hari-hari ini dipertahankan sebagai DOM Living Standard. Halaman ini memberikan tinjauan historis dari masa lalu.

Ini dikonfirmasi dalam dokumen W3C yang disebut "W3C DOM4". Kita mungkin menganggapnya berarti" DOM ​​Level 4 ", dan menganggapnya menambahkan level DOM tambahan, tetapi teks dari spesifikasi benar-benar mengatakan:

Dokumen ini diterbitkan sebagai snapshot dari DOM Living Specification.

Jadi, ini adalah diskusi historis, tetapi tetap yang berharga.

"Tingkat DOM" adalah kumpulan spesifikasi yang menggambarkan objek, metode, dan perilaku DOM. Tingkat yang lebih tinggi dari spesifikasi DOM yang dibangun pada level sebelumnya. Perubahan terjadi dalam dua cara:

  1. Penambahan kategori spesifikasi yang benar-benar baru (misalnya, Tingkat 3 menambahkan spesifikasi "Validasi" dan "Muat dan Simpan", yang tidak ada di Tingkat 2)

  2. Modifikasi kategori spesifikasi yang ada (mis. Memperbarui spesifikasi "Inti")

Jelas, jenis perubahan pertama adalah murni aditif, bukan subtraktif. Jenis perubahan kedua juga tampaknya hampir secara eksklusif bersifat tambahan, mungkin karena W3C tertarik untuk menjaga kompatibilitas ke belakang dengan versi sebelumnya.

Perubahan yang tidak kompatibel ke belakang cenderung jarang dan cukup kecil. Itu Document.doctype mengubah Anda mengutip, misalnya, sebenarnya sebagian besar tambahan. Level 3 menambahkan kalimat:

Untuk dokumen HTML, objek DocumentType dapat dikembalikan, terlepas dari ada tidaknya deklarasi tipe dokumen dalam dokumen HTML.

Ini hanya memberikan fleksibilitas yang lebih besar untuk memungkinkan implementasi DOM untuk menambahkan dalam DOCTYPE dalam HTML ketika penulis dihilangkan <!DOCTYPE>. Satu-satunya fungsi yang akan rusak adalah kemampuan untuk secara terprogram mendeteksi keberadaan doctype yang ditentukan oleh penulis, yang tampaknya tidak terlalu berharga.

Mungkin alasan Anda pernah mendengar seseorang berkata, "Oh, itu DOM level 2, jadi tidak apa-apa," adalah karena level DOM 2 lebih banyak didukung daripada tingkat DOM 3. Dalam beberapa kasus, ini bahkan bukan masalah peramban lama dukungan: Firefox menandai mereka kurangnya dukungan untuk "Load and Save" spesifikasi DOM 3 sebagai WONTFIX. Semua Level 2 spesifikasi, sebaliknya, didukung cukup baik oleh browser modern, dan menikmati dukungan dari banyak browser yang lebih tua (karena Level 2 adalah empat tahun lebih tua dari level 3).


11
2017-12-02 18:25



Hanya beberapa catatan di DOM4 untuk ditambahkan ke jawaban apsiller ':

... Di Level 1   DOM, setiap objek, apa pun tepatnya, adalah Node ..., apakah ini menyiratkan bahwa pernyataan seperti itu benar untuk   level 2, 3 dan 4?

Itu pasti tidak. Atribut di DOM4 bukan Nodes.

DOM4 membuat sejumlah perubahan signifikan yang tidak kompatibel ke belakang. Atribut-atribut yang tidak berubah node adalah besar jika Anda tidak menggunakan javascript atau bahasa yang diketik bebek. Juga document.createElement () pada dokumen XML akan membuat elemen di http://www.w3.org/1999/xhtml namespace, di mana level sebelumnya membuat elemen tanpa namespace. Browser telah lama melakukan ini, tetapi implementasi XML berorientasi XML yang khas telah menggunakan DOM3 dan cara sebelumnya. Itu adalah perubahan besar jika Anda bermigrasi dari implementasi DOM3 ke DOM4 dalam konteks non-browser.


4
2017-12-03 00:48