2011-07-01 14 views
12

document.getElementsByTagName zwrócił mi obiekt NodeList.Czy możemy bezpośrednio usunąć węzły z NodeList?

Chciałabym usunąć niektóre elementy (powiedzmy chciałbym usunąć pierwszy element z liście węzłów)

Czy istnieje sposób to zrobić? (Jestem świadomy, że mogę ręcznie skopiować wszystkie węzły do ​​tablicy, ale nie chcę tego robić, jeśli NodeList ma już dla nas funkcje usuwania elementów)

Mam świadomość, że usunięcie przedmiotów z a NodeList nie ma efektu na wyświetlaczu (i nie powinien powodować odświeżania ekranu przeglądarki lub podobnych rzeczy, po prostu nie życzę sobie, aby obiekt NodeList przechowywał odniesienie do tego węzła). to? (Czy jestem zmuszony skopiować wszystkie elementy w NodeList do tablicy?)

Odpowiedz

17

Jak widać w specification, nie ma metody usuwania elementu z listy.

I tak nie miałoby to sensu. Ten numer NodeList to live, co oznacza, że ​​DOM jest ponownie przeszukiwany za każdym razem, gdy uzyskujesz dostęp do określonej właściwości, np. length. Od MDC:

(...) Zwrócona lista lis live, co oznacza, że ​​automatycznie aktualizuje się w drzewie DOM. (...)

Więc musisz mieć do skopiować węzły do ​​tablicy.

Możesz to zrobić całkiem łatwo, ale za pomocą metod Array. Na przykład. kopiowanie go i bezpośrednio usunięcia pierwszego elementu:

var nodes = [].slice.call(elements, 1); 

NodeList JEST tablicowej obiektu. Dlatego możemy zastosować do niego funkcje tablicowe, używając call[docs]. [].slice to skrót, aby uzyskać odwołanie do metody slice[docs].

+11

OSTRZEŻENIE: To stara odpowiedź. Obecnie NodeList nie jest zawsze dostępny na żywo. na przykład. querySelectAll() zwraca nieżywą listę NodeList. – aMarCruz

Powiązane problemy