我在网页上有以下代码:
<div id="emails">
<ul>
<li>email1</li>
<li>email2</li>
</ul>
</div>
<a href="#" onClick="deleteEmail()">click</a>
我想删除第一封电子邮件,我一直在尝试这个:
function deleteEmail(){
var ul = document.getElementById('emails').getElementsByTagName('ul');
ul.removeChild(ul.childNodes[0]);
}
我是Javascript DOM的新手,所以如果有更好的方法,请告诉我。
注意:我想在没有任何js框架的情况下这样做。
答案 0 :(得分:3)
最正确的:
var ul = document.getElementById('emails').getElementsByTagName('ul')[0];
var li = ul.getElementsByTagName('li')[0];
ul.removeChild(li)
答案 1 :(得分:3)
1)更正确的字符串:
var ul = document.getElementById('emails').getElementsByTagName('ul')[0];
2)请注意,在“ul.childNodes [i]”中,我将为0表示空格,1表示<li>email1</li>
,2表示空格等。您应该使用ul.getElementsByTagName('li')[i]如果你只对<li>
s。
答案 2 :(得分:1)
DOM节点的子节点包括文本和注释,而不仅仅是元素,因此为了确定要删除的元素所在的索引,您需要考虑它们。在您的情况下,<li>
中第一个<ul>
的索引为1
。
您的`email'div的DOM如下所示:
DIV
text( whitespace )
UL
text ( whitespace )
LI
text (email1)
text ( whitespace )
LI
text (email2)
text ( whitespace )
text (whitespace)
话虽如此,最简单的方法是直接找到要删除的<li>
,然后将其删除。
var toRemove = document.
getElementById('emails').
getElementsByTagName('ul')[0].
getElementsByTagName('li')[0];
toRemove.parentNode.removeChild( toRemove );
答案 3 :(得分:1)
<div id="emails">
<ul>
<li>email1</li>
<li>email2</li>
</ul>
</div>
<a href="#" onClick="deleteEmail()">click</a>
<!--note that I made it so you actually invoke deleteEmail -->
我想删除第一封电子邮件,我一直在尝试这个:
function deleteEmail(){
//I believe you meant emails =/
var ul = document.getElementById('emails').getElementsByTagName('ul');
ul.removeChild(ul.getElementsByTagName("li")[0]);
}
答案 4 :(得分:1)
如果您将字符串“email#”转换为链接......就像这样:
<a href="" onClick="removeElement(this.parentNode);return false">email1</a>
具有与此类似的功能。
function removeElement(childElm) {
var parentElm = childElm.parentNode;
parentElm.removeChild(childElm);
}
虽然你可以在没有onClick的情况下使用removeElement(),但我只是喜欢它允许的简单性。