JS: entfernen lastChild funktioniert nur jedes zweite Schaltfläche klicken
Ich benutze diesen code zum löschen des letzten Elements einer <ul>
Liste, aber nur auf der zweiten, vierten, sechsten, ... jeden zweiten Klick auf den button das Element wird entfernt, aber bei jedem Klick erscheint die Meldung. Was kann ich tun, damit das element gelöscht wird auf jeden Klick.
JS:
document.getElementsByTagName('input')[0].onclick = function () {
'use strict';
var list = document.getElementById('list'), item = list.lastChild;
list.removeChild(item);
window.alert("Removed");
};
HTML:
<ul id="list">
<li>List item 1</li>
<li>List item 2</li>
<li>List item 3</li>
<li id="child">List item 4</li>
<li>List item 5</li>
</ul>
<input type="button" value="Delete last">
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, weil
.lastChild
liefert alle Knoten, einschließlich der leeren text-Knoten, die existieren in Ihrem<ul>
. Verwenden.lastElementChild
stattdessen richten Sie Ihre<li>
KnotenSehen HTML-DOM lastChild-Eigenschaft und HTML-DOM lastElementChild Eigenschaft weitere Informationen
JS:
HTML:
Einige weitere details, warum das passiert... Beim formatieren von markup mit klarem Abstand, was ich denke, als "phantom" text-Knoten geräuschlos existieren in Ihrem
<ul>
. Wenn Sie verkleinern das markup, das die folgenden, Ihre erste Beispiel würde zwar funktionieren,Plunker Link - minifed markup-Beispiel mit
.lastChild
text node
nicht dieelement node
mitlastElementChild
tut, entfernen Sie dieelement node
denen auch entfernt dietext node
<ul>
. Check out diese Plunker zu sehen, die leere text-Knoten angemeldet auf der KonsoleÄndern:
zu