Di jQuery, ada tiga metode untuk menghapus elemen dari DOM. Tiga metode ini adalah . sembunyikan () Sembunyikan elemen yang cocok. Tanpa parameter, metode .hide () adalah cara paling sederhana untuk menyembunyikan elemen HTML:
. empty () Metode .empty () menghapus semua node anak dan konten dari elemen yang dipilih. Metode ini tidak menghapus elemen itu sendiri, atau atributnya. Catatan Metode .empty () tidak menerima argumen apa pun untuk menghindari kebocoran memori. jQuery menghapus konstruksi lainnya, seperti data dan pengendali acara, dari elemen anak sebelum menghapus elemen itu sendiri. Contoh
Ini akan menghasilkan struktur DOM dengan teks Hai dihapus:
Jika kami memiliki sejumlah elemen bersarang di
dalam . hapus () Metode .remove () menghapus elemen yang dipilih, termasuk semua teks dan simpul anak. Metode ini juga menghapus data dan peristiwa dari elemen yang dipilih. Catatan Gunakan .remove () saat Anda ingin menghapus elemen itu sendiri, serta semua yang ada di dalamnya. Selain itu, semua acara terikat dan data jQuery yang terkait dengan elemen dihapus. [~ # ~] contoh [~ # ~] Pertimbangkan html berikut:
Ini akan menghasilkan struktur DOM dengan
Jika kami memiliki sejumlah elemen bersarang di dalam . detach () Metode .detach () menghapus elemen yang dipilih, termasuk semua teks dan simpul anak. Namun, itu menyimpan data dan acara. Metode ini juga menyimpan salinan elemen yang dihapus, yang memungkinkan mereka untuk dimasukkan kembali di lain waktu. Catatan Metode .detach () berguna ketika elemen yang dihapus harus dimasukkan kembali ke DOM di lain waktu. Contoh
Untuk info lebih lanjut, kunjungi: http://www.scriptcafe.in/2014/03/what-is-difference-between-jquery_15.html Indonesian (Bahasa Indonesia) translation by Andy Nur (you can also view the original English article) Salah satu konsep terpenting di DOM adalah tree traversal. Karena ilmu komputer telah ditetapkan sebagai bidang studinya sendiri, penelitian selama puluhan tahun telah digunakan untuk struktur
data dan algoritma. Salah satu struktur yang paling sering digunakan adalah tree (pohon). Tree ada dimana-mana. Versi yang sangat sederhana, namun berguna dan sering digunakan adalah binary tree. Turnamen bisa diwakili sebagai binary tree. DOM tree tidak binary. Sebaliknya itu adalah K-ary tree. Setiap node mungkin memiliki nol ke sub-node N, yang disebut DOM tree meng-host berbagai macam kemungkinan tipe dari node. Mungkin ada node Contoh IlustratifContoh yang juga berhubungan dengan artikel sebelumnya mengenai elemen Mengisi struktur subtree mengharuskan kita untuk mengulangi semua turunan dari root subtree. Pada setiap node kita perlu memeriksa jenis node yang tepat dan kemudian melanjutkannya dengan cara yang sesuai. Misalnya, setiap elemen perlu dianggap sebagai root subtree lagi. Node teks, di sisi lain, harus dievaluasi lebih hati-hati. Mungkin kita juga ingin memeriksa nodes komentar untuk direktif khusus. Selanjutnya, atribut elemen harus diperhatikan juga. Untuk skenarionya kita menggunakan metode yang disebut
function applyModel(model, data) { var rx = new RegExp('\\{\\s*(.+?)\\s*\\}', 'g'); var group = rx.exec(data); while (group) { var name = group[1]; var value = ''; eval('with (model) { value = ' + name + '; }'); data = data.replace(group[0], value); group = rx.exec(data); } return data; } Mari kita lihat sebuah implementasi untuk skenario yang dijelaskan, yang menggunakan metode function iterateClassic (template, model) { var fragment = template.content.clone(true); var allNodes = findAllNodes(fragment); allNodes.forEach(changeNode); return fragment; } Kode sebelumnya menggunakan fungsi Snippet berikut menunjukkan contoh implementasi untuk algoritma yang dijelaskan. function findAllNodes (childNodes) { var nodes = []; if (childNodes && childNodes.length > 0) { for (var i = 0, length = childNodes.length; i < length; i++) { nodes.push(childNodes[i]); nodes = nodes.concat(findAllNodes(childNodes[i].childNodes)); } } return nodes; } Fungsi untuk mengubah setiap node dalam array ditunjukkan di bawah ini. Fungsi melakukan beberapa manipulasi tergantung pada jenis node-nya. Kita hanya peduli dengan atribut dan node teks. function changeNode (node) { switch (node.nodeType) { case Node.TEXT_NODE: node.text.data = applyModel(model, node.text.data); break; case Node.ELEMENT_NODE: Array.prototype.forEach.call(node.attributes, function (attribute) { attribute.value = applyModel(model, attribute.value); }); break; } } Meski kodenya mudah dimengerti, ini tidak begitu cantik. Kita memiliki beberapa masalah kinerja, terutama karena kita memiliki banyak operasi DOM yang diperlukan. Hal ini dapat dilakukan dengan lebih efisien menggunakan salah satu
helper DOM tree. Perhatikan bahwa metode Perulangan Atas NodeSolusi yang muncul segera adalah dengan menggunakan
Sementara argumen pertama hanyalah node DOM biasa, dua lainnya menggunakan konstanta khusus. Misalnya, jika semua node harus dimunculkan, kita harus meneruskan Argumen ketiga adalah objek yang mungkin terlihat primitif seperti snippet kode berikut. Meski objek yang membungkus fungsinya tampak redundan, ini sudah ditentukan seperti itu. Beberapa browser, semisal. Mozilla Firefox, memberi kita kemungkinan untuk mengurangi objek ke satu fungsi. var acceptAllNodes = { acceptNode: function (node) { return NodeFilter.FILTER_ACCEPT; } }; Di sini kita menerima setiap node yang
diteruskan. Selain itu kita memiliki pilihan untuk menolak sebuah node ((dan turunannya) dengan opsi Mengimplementasikan contoh sebelumnya dengan menggunakan Mari kita lihat contoh yang telah ditransformasikan. function iterateNodeIterator (template, model) { var currentNode; var fragment = template.content.clone(true); var iterator = document.createNodeIterator( fragment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT, acceptAllNodes, false ); while ((currentNode = iterator.nextNode())) changeNode(currentNode); return fragment; } Pencarian DOM benar-benar tersembunyi dari kita. Ini adalah keuntungan yang besar. Kita hanya meminta node yang diinginkan, dan sisanya dilakukan dengan cara yang paling efisien di mesin browser. Namun, di sisi lain kita masih harus memberikan kode untuk mengulang atribut. Meskipun atribut ditutupi oleh konstanta Contoh sebelumnya juga bisa meminta perubahan pada filter yang disediakan. Bagaimanapun, ini bukan praktik yang baik, karena kita mungkin ingin menggunakan iterator untuk tujuan yang lain juga. Oleh karena iterator seharusnya benar-benar menyajikan solusi baca-saja, yang tidak bermutasi tree. Mutasi tree juga tidak
didukung dengan baik oleh Berjalan di TreeKita ingin melakukkan perulangan atas node dalam subtree. Pilihan lain yang mungkin muncul di benak kita adalah dengan menggunakan Dalam kebanyakan skenario Perbedaan utama antara function iterateTreeWalker (template, model) { var fragment = template.content.clone(true); var walker = document.createTreeWalker( fragment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT, acceptAllNodes, false ); while (walker.nextNode()) changeNode(treeWalker.currentNode); return fragment; } Berbeda dengan
Rentang SeleksiAkhirnya, ada konstruksi ketiga yang mungkin menarik dalam keadaan tertentu. Jika kita ingin memilih rentang dalam array 1 dimensi maka kita dapat dengan mudah menerapkannya dengan hanya menggunakan dua indeks: Jika kita mengganti array dengan daftar yang tertaut maka kedua indeks juga bisa diganti dengan dua node konkret, Sekarang kita tidak memiliki masalah pada 1-dimensi, tetapi pada struktur tree. Memilih berbagai K-ary tree tidaklah sepele. Kita bisa menemukan algoritma kita sendiri, tetapi DOM tree memiliki beberapa masalah khusus. Misalnya, kita memiliki node teks, yang mungkin juga dikenakan rentang. Di DOM tree kita, rentangnya terdiri dari empat properti. Kita memiliki nodel awal, node akhir dan offset untuk keduanya. Ada juga helper, seperti metode range.setStart(node, 0); range.setEnd(node, node.childNodes.length); Rentang melampaui pilihan programatik murni. Mereka juga digunakan untuk pemilihan visual yang sesungguhnya di browser. Metode Mari kita pertimbangkan contoh sederhana untuk pilihan yang menghasilkan gambar berikut. Di sini kita mulai di node teks dari daftar item pertama dan selesai pada akhir node teks dari elemen strong. Gambar berikut menggambarkan rentang yang tercakup dari perspektif kode sumber. Menampilkan DOM tree untuk disediakan berbagai contoh Mengekstrak node yang dipilih memberikan kita Ekstraksi adalah benar-benar tindakan bermutasi DOM, yaitu memodifikasi truee yang ada. Sekarang kita tersisa dengan dua item berikut, persis seperti yang kita harapkan. Karena teks bisa mencakup unsur dan segala sesuatu yang terkandung di dalamnya, renngta juga perlu untuk mencakup kasus-kasus ini. Pada pandangan pertama Objek Range.prototype.current = function () { if (this.started) return this.startContainer.childNodes[this.startOffset]; }; Range.prototype.next = function (types) { var s = this.startContainer; var o = this.startOffset; var n = this.current(); if (n) { if (n.childNodes.length) { s = n; o = 0; } else if (o + 1 < s.childNodes.length) { o += 1; } else { do { n = s.parentNode; if (s == this.endContainer) return false; o = Array.prototype.indexOf.call(n.childNodes, s) + 1; s = n; } while (o === s.childNodes.length); } this.setStart(s, o); n = this.current(); } else if (!this.started) { this.started = true; n = this.current(); } if (n && types && Array.isArray(types) && types.indexOf(n.nodeType) < 0) return this.next(); return !!n; }; Kedua metode ini memungkinkan
kita menggunakan function iterateRange (template, model) { var fragment = template.content.clone(true); var range = document.createRange(); range.selectNodeContents(fragment); while (range.nextNode([Node.TEXT_NODE, Node.ELEMENT_NODE])) changeNode(range.current()); range.detach(); return fragment; } Meskipun Mendefinisikan metode iterator kita sendiri pada KesimpulanPerulangan melalui DOM tree adalah topik yang menarik bagi siapa saja yang memikirkan manipulasi DOM dan pengambilan node yang efisien. Untuk sebagian besar kasus penggunaan, sudah ada API yang sesuai. Apakah kita menginginkan perulangan biasa? Apakah kita ingin memilih rentang? Apakah kita tertarik untuk berjalan di tree? Ada kelebihan dan kekurangan masing-masing metode. Jika kita tahu apa yang kita inginkan, kita bisa membuat pilihan yang tepat. Sayangnya, struktur pohon tidak sesederhana array 1 dimensi. Mereka dapat dipetakan ke array 1 dimensi, namun pemetaan mengikuti algoritma yang sama dengan perulangan di atas strukturnya. Jika kita menggunakan salah satu struktur yang tersedia, kita memiliki akses ke metode yang telah mengikuti algoritma ini. Oleh karena itu kita mendapatkan cara mudah untuk melakukan beberapa perulangan pada node dalam K-ary tree. Kita juga menghemat beberapa kinerja dengan melakukan lebih sedikit operasi DOM. Referensi
|