Podczas usuwania elementu ze standardowym JavaScript należy najpierw przejść do jego elementu nadrzędnego:
var element = document.getElementById("element-id");
element.parentNode.removeChild(element);
Konieczność przejścia do węzła nadrzędnego wydaje mi się nieco dziwna, czy istnieje powód, dla którego JavaScript działa w ten sposób?
javascript
Zaz
źródło
źródło
element.remove()
bezpośrednio od ES5. Nie potrzebujesz rodzica!Odpowiedzi:
Wiem, że rozszerzanie natywnych funkcji DOM nie zawsze jest najlepszym lub najpopularniejszym rozwiązaniem, ale działa dobrze w nowoczesnych przeglądarkach.
Następnie możesz usunąć takie elementy
lub
Uwaga: to rozwiązanie nie działa dla IE 7 i niższych. Aby uzyskać więcej informacji o rozszerzaniu DOM, przeczytaj ten artykuł .
EDYCJA : Przeglądając moją odpowiedź w 2019 r.
node.remove()
Przyszedł mi na ratunek i może być używany w następujący sposób (bez powyższego wypełnienia):lub
Te funkcje są dostępne we wszystkich nowoczesnych przeglądarkach (nie IE). Czytaj więcej na MDN .
źródło
NodeList
lubHTMLCollection
które są zestawem elementów podobnych do tablicy. Druga definicja metody pozwala na usunięcie tych „zestawów elementów”.document.getElementsByClassName("my-elements").remove();
. Edycja: faktycznie usuwa kilka, ale wymaga ponownego uruchomienia, aby zakończyć. Wypróbuj na tej stronie z klasą „kopiuj komentarze”.Crossbrowser i IE> = 11:
źródło
$.ready
js alternatywę dlanoscript
tagów. Aby użyć go tak, jak chciałem, musiałem zawinąć go w funkcję 1mssetTimeout
. To rozwiązuje wszystkie moje problemy naraz. Gracias.outerHTML
wciąż jest nowym (er) dodatkiem do standardu. Jeśli szukasz wsparcia dla dowolnego oprogramowania> 6 w momencie pisania, potrzebujesz innego rozwiązania.remove
Funkcja wspomniano przez innych jest podobna sprawa. Jak zwykle bezpieczne jest stosowanie wypełniacza.delete element
nic nie robi, bo nie można usunąć zmiennych w JS, tylko klucze;) Sprawdź sam, czy nie działaconsole.log(element)
podelete element
...removeChild
(około 6-7% w moim systemie). Zobacz jsperf.com/clear-outerhtml-v-removechild/2Możesz stworzyć
remove
funkcję, abyś nie musiał za każdym razem o niej myśleć:źródło
elem
naremove.elem
. W ten sposób funkcja odwołuje się do siebie, więc nie musisz tworzyć innej zmiennej globalnej. :-)function remove(id) { document.getElementById(id).parentNote.removeChild(document.getElementById(id)); }
To właśnie obsługuje DOM . Wyszukaj na tej stronie „usuń” lub „usuń”, a removeChild jest jedyną, która usuwa węzeł.
źródło
element.remove();
zadziała. Może to coś nowego. Ale pierwszy raz dla mnie i to działa. Myślę, że to powinno zawsze działać, ponieważ to bardzo podstawowe musi mieć rzeczy.DOM jest zorganizowany w drzewie węzłów, gdzie każdy węzeł ma wartość, wraz z listą odniesień do jego węzłów potomnych.
element.parentNode.removeChild(element)
Naśladuje więc dokładnie to, co dzieje się wewnętrznie: Najpierw przejdź do węzła nadrzędnego, a następnie usuń odwołanie do węzła podrzędnego.Począwszy od DOM4, funkcja pomocnika jest zrobić to samo:
element.remove()
. To działa w 87% przeglądarek (stan na rok 2016), ale nie IE 11. Jeśli trzeba wspierać starszych przeglądarek, możesz:źródło
Aby usunąć jeden element:
Aby usunąć wszystkie elementy, na przykład o określonej nazwie klasy:
źródło
if(list[i] && list[i].parentElement)
linia jest konieczna? Czy istnienie każdego elementu nie jest gwarantowane przez fakt, że został zwróconygetElementsByClassName
metodą?document.getElementsByClassName(...
możesz po prostu użyć
element.remove()
źródło
element.remove()
nie jest prawidłowym skryptem JavaScript i działa tylko w niektórych przeglądarkach, takich jak Chrome .element.remove()
jest poprawny JavaScript w DOM4 i działa we wszystkich nowoczesnych przeglądarkach, oczywiście z wyjątkiem Internet Explorera.ChildNode.remove()
Metoda usuwa obiekt z drzewa, do której należy.https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove
Oto skrzypce, które pokazują, jak możesz zadzwonić
document.getElementById('my-id').remove()
https://jsfiddle.net/52kp584L/
**
Nie ma potrzeby rozszerzania NodeList. Zostało już wdrożone.
**
źródło
Możesz bezpośrednio usunąć ten element za pomocą
remove()
metody DOM.oto przykład:
źródło
Według poziomu Dom 4 specyfikacji, która jest obecna wersja w rozwoju, istnieją pewne nowe metody poręczny mutacji dostępny:
append()
,prepend()
,before()
,after()
,replace()
, iremove()
.https://catalin.red/removing-an-element-with-plain-javascript-remove-method/
źródło
Nazwa funkcji to
removeChild()
i jak można usunąć dziecko, gdy nie ma rodzica? :)Z drugiej strony nie zawsze trzeba nazywać to tak, jak pokazano.
element.parentNode
jest tylko pomocnikiem, aby uzyskać węzeł nadrzędny danego węzła. Jeśli znasz już węzeł nadrzędny, możesz go po prostu użyć w następujący sposób:Dawny:
https://developer.mozilla.org/en-US/docs/Web/API/Node/removeChild
================================================== =======
Aby dodać coś więcej:
Niektóre odpowiedzi wskazują, że zamiast używać
parentNode.removeChild(child);
, możesz użyćelem.remove();
. Ale, jak zauważyłem, istnieje różnica między tymi dwiema funkcjami i nie jest o nich mowa w tych odpowiedziach.Jeśli użyjesz
removeChild()
, zwróci odwołanie do usuniętego węzła.Ale jeśli użyjesz
elem.remove();
, nie zwróci ci referencji.https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove
Takie zachowanie można zaobserwować w Chrome i FF. Myślę, że warto to zauważyć :)
Mam nadzieję, że moja odpowiedź dodaje pewnej wartości do pytania i będzie pomocna !!
źródło
Funkcje korzystające z ele.parentNode.removeChild (ele) nie będą działać w przypadku elementów utworzonych, ale jeszcze nie wstawionych do kodu HTML. Biblioteki takie jak jQuery i Prototype mądrze używają metody podobnej do poniższej, aby ominąć to ograniczenie.
Myślę, że JavaScript działa w ten sposób, ponieważ oryginalni projektanci DOM utrzymywali nawigację nadrzędną / podrzędną oraz poprzednią / następną nawigację jako wyższy priorytet niż tak popularne dziś modyfikacje DHTML. Możliwość czytania z jednego <input type = 'text'> i pisania do drugiego według względnej lokalizacji w DOM była przydatna w połowie lat 90., kiedy dynamiczne generowanie całych formularzy HTML lub interaktywnych elementów GUI było zaledwie migotaniem oko jakiegoś dewelopera.
źródło
IMHO: Powód tego jest taki sam, jak widziałem w innych środowiskach: wykonujesz akcję na podstawie swojego „linku” do czegoś. Nie możesz go usunąć, gdy jesteś z nim połączony.
Jak ścinanie gałęzi drzewa. Podczas cięcia usiądź na boku najbliżej drzewa, w przeciwnym razie wynik będzie ... niefortunny (choć zabawny).
źródło
Ten faktycznie pochodzi z FireFox ... tym razem IE wyprzedził paczkę i pozwolił na usunięcie elementu bezpośrednio.
To tylko moje założenie, ale uważam, że powodem, dla którego musisz usunąć dziecko za pośrednictwem rodzica, jest problem ze sposobem, w jaki FireFox obsługiwał referencję.
Jeśli wywołujesz obiekt, aby bezpośrednio popełnić hari-kari, to zaraz po jego śmierci nadal masz do niego odniesienie. Może to spowodować kilka paskudnych błędów ... takich jak nieusunięcie go, usunięcie go, ale zachowanie referencji, które wydają się prawidłowe, lub po prostu wyciek pamięci.
Wierzę, że kiedy zdali sobie sprawę z tego problemu, obejście polegało na usunięciu elementu przez jego element nadrzędny, ponieważ gdy element zniknie, teraz po prostu trzymasz odniesienie do elementu nadrzędnego. To powstrzymałoby całą tę nieprzyjemność i (na przykład, zamykając węzeł drzewa po węźle) całkiem ładnie się „spakowało”.
Powinien to być łatwy do naprawienia błąd, ale podobnie jak w przypadku wielu innych rzeczy w programowaniu internetowym, wydanie prawdopodobnie zostało przyspieszone, co doprowadziło do tego ... a zanim pojawiła się kolejna wersja, wystarczająca liczba osób korzystała z niego, że zmiana tego doprowadziłaby do złamania kawałka kodu.
Znowu wszystko to jest po prostu zgadywaniem.
Z niecierpliwością czekam jednak na dzień, w którym programowanie sieciowe zostanie w końcu całkowicie wyczyszczone na wiosnę, wszystkie te dziwne małe dziwactwa zostaną oczyszczone i wszyscy zaczną grać na tych samych zasadach.
Prawdopodobnie dzień po tym, jak mój robot-robot pozwał mnie o zaległe płace.
źródło
removeChild
jest metodą interfejsu DOM Level 1Node
.Z tego, co rozumiem, usunięcie węzła bezpośrednio nie działa w Firefoksie, tylko Internet Explorer. Tak więc, aby wesprzeć Firefoksa, musisz iść do rodzica, aby usunąć jego dziecko.
Ref: http://chiragrdarji.wordpress.com/2007/03/16/removedelete-element-from-page-using-javascript-working-in-firefoxieopera/
źródło
źródło
To najlepsza funkcja do usuwania elementu bez błędu skryptu:
Uwaga do
EObj=document.getElementById(EId)
.To JEDEN znak równości nie
==
.jeśli element
EId
istnieje, funkcja go usuwa, w przeciwnym razie zwraca false, a nieerror
.źródło