JS:删除 lastChild 仅在每秒单击一次按钮时起作用
JS: remove lastChild only works every second button click
我使用此代码删除 <ul>
列表的最后一项,但仅在第二次、第四次、第六次、...每秒单击按钮时删除该项目,但每次单击消息出现。我该怎么做才能在每次点击时删除该元素。
document.getElementsByTagName('input')[0].onclick = function () {
'use strict';
var list = document.getElementById('list'), item = list.lastChild;
list.removeChild(item);
window.alert("Removed");
};
<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">
这是因为 .lastChild
returns 所有节点,包括存在于您的 <ul>
中的空文本节点。使用 .lastElementChild
来定位您的 <li>
节点
The difference between this property and lastElementChild, is that
lastChild returns the last child node as an element node, a text node
or a comment node (depending on which one's last), while
lastElementChild returns the last child node as an element node
(ignores text and comment nodes).
有关详细信息,请参阅 HTML DOM lastChild Property and HTML DOM lastElementChild Property
document.getElementsByTagName('input')[0].onclick = function () {
var list = document.getElementById('list'), item = list.lastElementChild;
list.removeChild(item);
};
<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">
关于为什么会发生这种情况的更多详细信息...当您使用干净的间距格式化标记时,我认为 "phantom" 文本节点静静地存在于您的 <ul>
中。如果您将此标记缩小为以下内容,您的第一个示例确实可以正常工作
<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>
Plunker Link - 使用 .lastChild
的缩小标记示例
变化:
item = list.lastChild;
至
item = list.lastElementChild;
我使用此代码删除 <ul>
列表的最后一项,但仅在第二次、第四次、第六次、...每秒单击按钮时删除该项目,但每次单击消息出现。我该怎么做才能在每次点击时删除该元素。
document.getElementsByTagName('input')[0].onclick = function () {
'use strict';
var list = document.getElementById('list'), item = list.lastChild;
list.removeChild(item);
window.alert("Removed");
};
<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">
这是因为 .lastChild
returns 所有节点,包括存在于您的 <ul>
中的空文本节点。使用 .lastElementChild
来定位您的 <li>
节点
The difference between this property and lastElementChild, is that lastChild returns the last child node as an element node, a text node or a comment node (depending on which one's last), while lastElementChild returns the last child node as an element node (ignores text and comment nodes).
有关详细信息,请参阅 HTML DOM lastChild Property and HTML DOM lastElementChild Property
document.getElementsByTagName('input')[0].onclick = function () {
var list = document.getElementById('list'), item = list.lastElementChild;
list.removeChild(item);
};
<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">
关于为什么会发生这种情况的更多详细信息...当您使用干净的间距格式化标记时,我认为 "phantom" 文本节点静静地存在于您的 <ul>
中。如果您将此标记缩小为以下内容,您的第一个示例确实可以正常工作
<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>
Plunker Link - 使用 .lastChild
变化:
item = list.lastChild;
至
item = list.lastElementChild;