Saya benar-benar bingung antara objek Node dan objek Elemen.
document.getElementById()
mengembalikan objek Elemen sementara document.getElementsByClassName()
mengembalikan objek NodeList (Koleksi Elemen atau Node?)
Jika div adalah Obyek Elemen lalu bagaimana dengan objek div Node?
Apa itu Objek Node?
Apakah objek dokumen, objek Elemen dan Objek Teks juga merupakan objek Node?
Sesuai dengan buku David Flanagan 'Objek Dokumen, Objek Elemen dan objek teks semuanya adalah Objek Node'.
Jadi, mengapa sebuah objek dapat mewarisi properti / metode objek Elemen serta objek Node?
Jika ya, saya kira Kelas Node dan Kelas Elemen terkait dalam pohon prototip warisan.
<div id="test">
<p class="para"> 123 </p>
<p class="para"> abc </p>
</div>
<p id="id_para"> next </p>
document.documentElement.toString(); // [object HTMLHtmlElement]
var div = document.getElementById("test");
div.toString(); // [object HTMLDivElement]
var p1 = document.getElementById("id_para");
p1.toString(); // [object HTMLParagraphElement]
var p2 = document.getElementsByClassName("para");
p2.toString(); //[object HTMLCollection]
javascript
html
dom
PK
sumber
sumber
Jawaban:
A
node
adalah nama generik untuk semua jenis objek dalam hierarki DOM. Anode
bisa menjadi salah satu elemen DOM bawaan sepertidocument
ataudocument.body
, bisa berupa tag HTML yang ditentukan dalam HTML seperti<input>
atau<p>
atau bisa juga merupakan simpul teks yang dibuat oleh sistem untuk menahan blok teks di dalam elemen lain . Jadi, singkatnya, anode
adalah objek DOM.An
element
adalah salah satu tipe spesifiknode
karena ada banyak tipe node lainnya (node teks, node komentar, node dokumen, dll ...).DOM terdiri dari hierarki node di mana masing-masing node dapat memiliki orangtua, daftar node anak dan nextSibling danSegling sebelumnya. Struktur itu membentuk hierarki seperti pohon. The
document
simpul akan memiliki daftar node anak (yanghead
simpul danbody
simpul). Thebody
simpul akan memiliki daftar node anak (elemen-elemen tingkat atas di halaman HTML Anda) dan sebagainya.Jadi, a
nodeList
hanyalah sebuah daftar seperti arraynodes
.Elemen adalah tipe node tertentu, yang dapat secara langsung ditentukan dalam HTML dengan tag HTML dan dapat memiliki properti seperti
id
atauclass
. dapat memiliki anak, dll ... Ada beberapa jenis simpul seperti simpul komentar, simpul teks, dll ... dengan karakteristik berbeda. Setiap node memiliki properti.nodeType
yang melaporkan tipe node apa itu. Anda dapat melihat berbagai jenis node di sini (diagram dari MDN ):Anda dapat melihat
ELEMENT_NODE
adalah salah satu jenis simpul tertentu di mananodeType
properti memiliki nilai1
.Jadi
document.getElementById("test")
hanya bisa mengembalikan satu simpul dan dijamin menjadi elemen (tipe simpul tertentu). Karena itu hanya mengembalikan elemen daripada daftar.Karena
document.getElementsByClassName("para")
dapat mengembalikan lebih dari satu objek, perancang memilih untuk mengembalikannodeList
karena itulah tipe data yang mereka buat untuk daftar lebih dari satu node. Karena ini hanya dapat berupa elemen (hanya elemen yang biasanya memiliki nama kelas), secara teknis ini adalahnodeList
yang hanya memiliki node tipe elemen di dalamnya dan desainer dapat membuat koleksi dengan nama berbeda yang merupakanelementList
, tetapi mereka memilih untuk menggunakan hanya satu jenis koleksi apakah itu hanya memiliki elemen di dalamnya atau tidak.EDIT: HTML5 mendefinisikan
HTMLCollection
yang merupakan daftar Elemen HTML (bukan sembarang simpul, hanya Elemen). Sejumlah properti atau metode dalam HTML5 sekarang mengembalikan sebuahHTMLCollection
. Meskipun sangat mirip dalam antarmuka dengannodeList
, perbedaan sekarang dibuat karena hanya berisi Elemen, bukan semua jenis node.Perbedaan antara a
nodeList
dan aHTMLCollection
memiliki sedikit dampak pada bagaimana Anda menggunakan satu (sejauh yang saya tahu), tetapi desainer HTML5 kini telah membuat perbedaan itu.Misalnya,
element.children
properti mengembalikan HTMLCollection langsung.sumber
Node
adalah untuk menerapkan struktur pohon, sehingga metodenya adalah untukfirstChild
,lastChild
,childNodes
, dll Hal ini lebih dari sebuah kelas untuk struktur pohon generik.Dan kemudian, beberapa
Node
benda jugaElement
benda.Element
mewarisi dariNode
.Element
objek sebenarnya mewakili objek sebagaimana ditentukan dalam file HTML oleh tag seperti<div id="content"></div>
. TheElement
kelas mendefinisikan properti dan metode sepertiattributes
,id
,innerHTML
,clientWidth
,blur()
, danfocus()
.Beberapa
Node
objek adalah simpul teks dan bukanElement
obyek. SetiapNode
objek memilikinodeType
properti yang menunjukkan jenis node apa itu, untuk dokumen HTML:Kita dapat melihat beberapa contoh di konsol:
Baris terakhir di atas menunjukkan yang
Element
mewarisi dariNode
. (jalur itu tidak akan berfungsi di IE karena__proto__
. Perlu menggunakan Chrome, Firefox, atau Safari).By the way,
document
objek adalah puncak pohon simpul, dandocument
merupakanDocument
objek, danDocument
mewarisiNode
juga:Berikut adalah beberapa dokumen untuk kelas Node dan Elemen:
https://developer.mozilla.org/en-US/docs/DOM/Node
https://developer.mozilla.org/en-US/docs/DOM/Element
sumber
<span data-a="1" >123</span>
? rentang ini adalah elemen yang memiliki simpul itu sendiri. tetapi apakah atribut itu juga memiliki simpulnya sendiri?Sumber informasi terbaik untuk semua kesengsaraan DOM Anda
http://www.w3.org/TR/dom/#nodes
"Objek yang mengimplementasikan antarmuka dokumen, DocumentFragment, DocumentType, Elemen, Teks, ProcessingInstruction, atau Komentar (hanya disebut node) berpartisipasi dalam pohon."
http://www.w3.org/TR/dom/#element
"Node elemen hanya dikenal sebagai elemen."
sumber
Node: http://www.w3schools.com/js/js_htmldom_nodes.asp
Objek Node mewakili node tunggal di pohon dokumen. Node dapat berupa simpul elemen, simpul atribut, simpul teks, atau jenis simpul lainnya yang dijelaskan dalam bab Jenis Node.
Elemen: http://www.w3schools.com/js/js_htmldom_elements.asp
Objek Elemen mewakili elemen dalam dokumen XML. Elemen dapat berisi atribut, elemen lain, atau teks. Jika suatu elemen berisi teks, teks direpresentasikan dalam simpul teks.
duplikat:
sumber
Node digunakan untuk mewakili tag secara umum. Dibagi menjadi 3 jenis:
Catatan Atribut: adalah simpul yang di dalamnya memiliki atribut. Exp:
<p id=”123”></p>
Text Node: adalah simpul yang antara membuka dan menutupnya memiliki konten teks contian. Exp:
<p>Hello</p>
Elemen Node: adalah simpul yang di dalamnya memiliki tag lain. Exp:
<p><b></b></p>
Setiap node dapat berupa tipe secara bersamaan, tidak hanya dari satu tipe saja.
Elemen hanyalah sebuah simpul elemen.
sumber