Katakanlah saya mendefinisikan elemen
$foo = $('#foo');
dan kemudian saya menelepon
$foo.remove()
dari beberapa acara. Pertanyaan saya adalah, bagaimana saya memeriksa apakah $ foo telah dihapus dari DOM atau tidak? Saya telah menemukan itu $foo.is(':hidden')
berhasil, tetapi tentu saja itu juga akan mengembalikan kebenaran jika saya hanya menelepon $foo.hide()
.
$foo.closest(document.documentElement)
lebih cepat (jika ada yang peduli jsperf.com/jquery-element-in-dom )$.contains(document.documentElement, $foo.get(0))
ini cara tercepat.document.contains($foo[0])
Bagaimana dengan melakukan ini:
sumber
Saya baru menyadari jawaban ketika saya mengetik pertanyaan saya: Telepon
Jika
$f00
telah dihapus dari DOM, maka$foo.parent().length === 0
. Kalau tidak, panjangnya paling tidak 1.[Sunting: Ini tidak sepenuhnya benar, karena elemen yang dihapus masih dapat memiliki induk; misalnya, jika Anda menghapus a
<ul>
, masing-masing anaknya<li>
masih akan memiliki orangtua. Gunakan jawaban SLaks sebagai gantinya.sumber
$foo
telah dihapus dari DOM. Jika berhasil dihapus, tidak akan lagi memiliki elemen induk. Karena itu$foo.parent().length === 0
berarti penghapusan berhasil.Karena saya tidak dapat menjawab sebagai komentar (saya kira terlalu rendah karma), inilah jawaban lengkapnya. Cara tercepat adalah dengan mudah membuka gulungan jQuery untuk dukungan browser dan mencukur faktor konstan menjadi minimum.
Seperti terlihat juga di sini - http://jsperf.com/jquery-element-in-dom/28 - kode akan terlihat seperti ini:
Ini semantik setara dengan jQuery.contains (document.documentElement, elt [0]).
sumber
Mungkin cara yang paling performatif adalah:
Ini juga berfungsi dengan jQuery:
Sumber dari MDN
sumber
Saya menyukai pendekatan ini. Tidak ada jQuery dan tidak ada pencarian DOM. Pertama temukan orang tua teratas (leluhur). Kemudian lihat apakah itu documentElement.
sumber
alih-alih iterasi orang tua Anda hanya bisa mendapatkan kotak pembatas yang semuanya nol ketika elemen dilepaskan dari dom
jika Anda ingin menangani kasing tepi elemen lebar dan tinggi nol di atas nol dan di kiri nol, Anda dapat memeriksa ulang dengan mengulangi orang tua hingga dokumen.
sumber
display: none
tidak memiliki boundingRect jugaSetuju dengan komentar Perro. Bisa juga dilakukan seperti ini:
sumber
sumber
Kenapa tidak adil
if( $('#foo').length === 0)...
:?sumber
$foo
, dan memeriksa apakah permintaan ulang cocok dengan elemen apa pun, tampaknya merupakan solusi yang layak untuk masalah dalam banyak skenario. Bahkan mungkin lebih cepat daripada beberapa solusi lain karena bagaimana jQuery dan browser mengoptimalkan penyeleksi tertentu (seperti dengan ID).sumber