Jak zniszczyć element DOM za pomocą jQuery?

141

Załóżmy, że obiekt jQuery to $target.

o mój Boże
źródło

Odpowiedzi:

194

Jest $target.remove(); to, czego szukasz?

https://api.jquery.com/remove/

Jourkey
źródło
75
Oczywiście powoduje to tylko usunięcie go z widocznego dokumentu. Jeśli istnieją inne odwołania do węzła z JavaScript, takie jak sama zmienna $ target, obiekt na razie ucieknie z modułu odśmiecania pamięci. Jeśli chcesz go ZNISZCZYĆ, musisz też stracić wszelkie odniesienia do niego. Nie jestem jednak do końca pewien, dlaczego chcesz ZNISZCZYĆ element DOM. Może po prostu nienawidzisz $ target. Biedny $ target, co on ci kiedykolwiek zrobił?
bobince
52
$ target jest miły, gdy jest sam, ale robi się paskudny, gdy jest w pobliżu swoich 100 000 sklonowanych przyjaciół.
Sebastián Grignoli
2
Będzie .empty()miał podobny efekt?
Saurabh Nanda
3
@SaurabhNanda - Empty usunie zawartość obiektu, ale nie usunie (ani nie zniszczy) samego obiektu.
Łukasz
46

Jeśli chcesz całkowicie zniszczyć cel, masz kilka opcji. Najpierw możesz usunąć obiekt z DOM, jak opisano powyżej ...

console.log($target);   // jQuery object
$target.remove();       // remove target from the DOM
console.log($target);   // $target still exists

Opcja 1 - Następnie zamień cel na pusty obiekt jQuery (jQuery 1.4+)

$target = $();
console.log($target);   // empty jQuery object

Opcja 2 - Lub całkowicie usuń usługę (spowoduje to błąd, jeśli odwołasz się do niej w innym miejscu)

delete $target;
console.log($target);   // error: $target is not defined

Więcej informacji : informacje o pustym obiekcie jQuery oraz informacje o usuwaniu

Łukasz
źródło
3
Dlaczego delete $targetnie zadziała: perfectionkills.com/understanding-delete/#misconceptions Dlaczego nie $target=nullzadziała?
LeeGee,
@LeeGee - Czy możesz podsumować swój post, aby wyjaśnić, dlaczego usuwanie nie działa w przypadku obiektów jQuery? Dlaczego wygląda na to, że działa, gdy spojrzymy na console.log ($ target) na końcu? Dziękuję Ci.
Łukasz
Nie potrafię tego lepiej wyjaśnić niż cytowany artykuł, który uważam za bardzo szczegółowy.
LeeGee,
Dla przypomnienia, działa to w konsoli, ponieważ konsola ocenia JS w zakresie eval, co umożliwia usuwanie. Zmienne w zakresach „naturalnych” nie będą usuwane. Użyj $target=nullzamiast tego. Jest szybszy i nie powoduje problemów z wewnętrznymi optymalizacjami przeglądarki.
bendman
1
Usuń jest w porządku. Oznacza to po prostu, że blok nie zostanie zoptymalizowany przez silnik JS. W większości przypadków jest to całkowicie nieistotne. Kiedy staje się to problemem, szukasz sposobów na obejście funkcji usuwania. Nie przed.
Charlie Martin