Saat menghapus elemen dengan JavaScript standar, Anda harus pergi ke induknya terlebih dahulu:
var element = document.getElementById("element-id");
element.parentNode.removeChild(element);
Harus pergi ke simpul orangtua tampaknya agak aneh bagi saya, apakah ada alasan JavaScript berfungsi seperti ini?
javascript
Zaz
sumber
sumber
element.remove()
langsung pada ES5. Anda tidak membutuhkan orang tua!Jawaban:
Saya tahu bahwa menambah fungsi DOM asli tidak selalu merupakan solusi terbaik atau paling populer, tetapi ini berfungsi dengan baik untuk peramban modern.
Dan kemudian Anda dapat menghapus elemen seperti ini
atau
Catatan: solusi ini tidak berfungsi untuk IE 7 dan di bawahnya. Untuk info lebih lanjut tentang memperpanjang DOM, baca artikel ini .
EDIT : Meninjau jawaban saya pada tahun 2019,
node.remove()
telah datang untuk menyelamatkan dan dapat digunakan sebagai berikut (tanpa polyfill di atas):atau
Fungsi-fungsi ini tersedia di semua browser modern (bukan IE). Baca lebih lanjut tentang MDN .
sumber
NodeList
atauHTMLCollection
yang array seperti set elemen. Definisi metode kedua memungkinkan "set elemen" ini untuk dihapus.document.getElementsByClassName("my-elements").remove();
. Sunting: sebenarnya itu menghapus banyak tetapi membutuhkan menjalankan kembali untuk menyelesaikan. Cobalah di halaman ini dengan kelas "comment-copy".Crossbrowser dan IE> = 11:
sumber
$.ready
alternatif js untuknoscript
tag. Untuk menggunakannya sesuai keinginan saya, saya harus membungkusnya dalamsetTimeout
fungsi 1ms . Ini menyelesaikan semua masalah saya sekaligus. Gracias.outerHTML
masih tambahan baru untuk standar. Jika Anda mencari dukungan pada perangkat lunak apa pun> 6 pada saat penulisan, Anda akan memerlukan solusi lain. Theremove
Fungsi disebutkan oleh orang lain adalah kasus serupa. Seperti biasa, aman untuk menerapkan polyfill.delete element
tidak melakukan apa-apa karena Anda tidak dapat menghapus variabel dalam JS, hanya kunci;) Periksa sendiri itu tidak bekerjaconsole.log(element)
setelahdelete element
...removeChild
(sekitar 6-7% pada sistem saya). Lihat jsperf.com/clear-outerhtml-v-removechild/2Anda dapat membuat suatu
remove
fungsi sehingga Anda tidak perlu memikirkannya setiap saat:sumber
elem
menjadiremove.elem
. Dengan begitu fungsi referensi itu sendiri, sehingga Anda tidak perlu membuat variabel global lain. :-)function remove(id) { document.getElementById(id).parentNote.removeChild(document.getElementById(id)); }
Itu yang DOM dukung . Cari halaman itu untuk "hapus" atau "hapus" dan removeChild adalah satu-satunya yang menghilangkan simpul.
sumber
element.remove();
akan berhasil. Mungkin itu sesuatu yang baru. Tetapi pertama kali bagi saya dan itu berhasil. Saya pikir itu harus selalu bekerja karena itu sangat mendasar harus punya barang.DOM diatur dalam pohon node, di mana setiap node memiliki nilai, bersama dengan daftar referensi ke node anaknya. Jadi,
element.parentNode.removeChild(element)
meniru persis apa yang terjadi secara internal: Pertama, Anda pergi ke simpul induk, kemudian hapus referensi ke simpul anak.Pada DOM4, fungsi pembantu disediakan untuk melakukan hal yang sama:
element.remove()
. Ini berfungsi di 87% browser (per 2016), tetapi tidak untuk IE 11. Jika Anda perlu mendukung browser yang lebih lama, Anda dapat:sumber
Untuk menghapus satu elemen:
Untuk menghapus semua elemen dengan misalnya nama kelas tertentu:
sumber
if(list[i] && list[i].parentElement)
garis itu perlu? Bukankah keberadaan setiap elemen dijamin oleh fakta bahwa ia dikembalikan olehgetElementsByClassName
metode?document.getElementsByClassName(...
Anda bisa menggunakannya
element.remove()
sumber
element.remove()
bukan JavaScript yang valid dan hanya berfungsi di browser tertentu seperti Chrome .element.remove()
adalah JavaScript yang valid dengan DOM4 , dan bekerja di semua browser modern, tentu saja dengan pengecualian Internet Explorer.The
ChildNode.remove()
Metode menghapus objek dari pohon itu milik.https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove
Ini biola yang menunjukkan bagaimana Anda bisa menelepon
document.getElementById('my-id').remove()
https://jsfiddle.net/52kp584L/
**
Tidak perlu memperpanjang NodeList. Sudah diterapkan.
**
sumber
Anda dapat langsung menghapus elemen itu dengan menggunakan
remove()
metode DOM.ini sebuah contoh:
sumber
Menurut tingkat DOM 4 spesifikasi, yang merupakan versi saat ini dalam pengembangan, ada beberapa metode yang berguna mutasi baru yang tersedia:
append()
,prepend()
,before()
,after()
,replace()
, danremove()
.https://catalin.red/removing-an-element-with-plain-javascript-remove-method/
sumber
Nama fungsinya adalah
removeChild()
, dan bagaimana mungkin menghapus anak ketika tidak ada orang tua? :)Di sisi lain, Anda tidak harus selalu menyebutnya seperti yang Anda tunjukkan.
element.parentNode
hanya penolong untuk mendapatkan simpul induk dari simpul yang diberikan. Jika Anda sudah tahu simpul induk, Anda bisa menggunakannya seperti ini:Ex:
https://developer.mozilla.org/en-US/docs/Web/API/Node/removeChild
================================================== =======
Untuk menambahkan sesuatu yang lebih:
Beberapa jawaban menunjukkan bahwa alih-alih menggunakan
parentNode.removeChild(child);
, Anda dapat menggunakanelem.remove();
. Tapi seperti yang saya perhatikan, ada perbedaan antara dua fungsi, dan tidak disebutkan dalam jawaban itu.Jika Anda menggunakan
removeChild()
, itu akan mengembalikan referensi ke node yang dihapus.Tetapi jika Anda menggunakan
elem.remove();
, itu tidak akan mengembalikan Anda referensi.https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove
Perilaku ini dapat diamati di Chrome dan FF. Saya percaya ini layak diperhatikan :)
Semoga jawaban saya menambah nilai pada pertanyaan dan akan sangat membantu !!
sumber
Fungsi yang menggunakan ele.parentNode.removeChild (ele) tidak akan berfungsi untuk elemen yang Anda buat tetapi belum dimasukkan ke dalam HTML. Perpustakaan seperti jQuery dan Prototype dengan bijak menggunakan metode seperti berikut untuk menghindari batasan itu.
Saya pikir JavaScript berfungsi seperti itu karena desainer asli DOM mengadakan navigasi induk / anak dan sebelumnya / berikutnya sebagai prioritas yang lebih tinggi daripada modifikasi DHTML yang sangat populer saat ini. Mampu membaca dari satu <input type = 'text'> dan menulis ke yang lain dengan lokasi relatif di DOM berguna pada pertengahan 90-an, masa ketika generasi dinamis dari seluruh bentuk HTML atau elemen GUI interaktif nyaris tidak ada dalam binar mata beberapa pengembang.
sumber
IMHO: Alasannya sama dengan yang saya lihat di lingkungan lain: Anda melakukan tindakan berdasarkan "tautan" Anda ke sesuatu. Anda tidak dapat menghapusnya saat Anda ditautkan ke dalamnya.
Seperti memotong dahan pohon. Duduklah di sisi terdekat dengan pohon sambil memotong atau hasilnya akan ... disayangkan (walaupun lucu).
sumber
Yang ini sebenarnya berasal dari FireFox ... untuk sekali, IE berada di depan paket dan memungkinkan penghapusan elemen secara langsung.
Ini hanya asumsi saya, tapi saya percaya alasan Anda harus menghapus anak melalui orang tua adalah karena masalah dengan cara FireFox menangani referensi.
Jika Anda memanggil objek untuk melakukan hari-kari secara langsung, maka segera setelah itu mati, Anda masih memegang referensi itu untuk itu. Ini memiliki potensi untuk membuat beberapa bug jahat ... seperti gagal menghapusnya, menghapusnya tetapi menyimpan referensi untuknya yang tampak valid, atau sekadar kebocoran memori.
Saya percaya bahwa ketika mereka menyadari masalah ini, pekerjaan di sekitar adalah menghapus elemen melalui induknya karena ketika elemen tersebut hilang, Anda sekarang hanya memegang referensi ke induknya. Ini akan menghentikan semua ketidaknyamanan itu, dan (jika menutup simpul pohon dengan simpul, misalnya) akan 'zip-up' dengan lebih baik.
Itu seharusnya bug yang mudah diperbaiki, tetapi seperti banyak hal lain dalam pemrograman web, rilisnya mungkin tergesa-gesa, mengarah ke ini ... dan pada saat versi berikutnya muncul, cukup banyak orang yang menggunakannya untuk mengubah ini akan menyebabkan untuk memecahkan banyak kode.
Sekali lagi, semua ini hanyalah dugaan saya.
Namun, saya menantikan hari ketika pemrograman web akhirnya mendapatkan pembersihan penuh musim semi, semua keanehan kecil aneh ini dibersihkan, dan semua orang mulai bermain dengan aturan yang sama.
Mungkin sehari setelah pelayan robot saya menuntut saya untuk upah kembali.
sumber
removeChild
adalah metode antarmuka DOM Level 1Node
.Dari apa yang saya mengerti, menghapus node secara langsung tidak berfungsi di Firefox, hanya Internet Explorer. Jadi, untuk mendukung Firefox, Anda harus pergi ke induk untuk menghapus anak itu.
Ref: http://chiragrdarji.wordpress.com/2007/03/16/removedelete-element-from-page-using-javascript-working-in-firefoxieopera/
sumber
sumber
Ini adalah fungsi terbaik untuk menghapus elemen tanpa kesalahan skrip:
Catatan untuk
EObj=document.getElementById(EId)
.Ini adalah SATU tanda sama dengan tidak
==
.jika elemen
EId
ada maka fungsi menghapusnya, jika tidak mengembalikan false, bukanerror
.sumber