2010-06-14 68 views
3

我有一個網頁下面的代碼:removeChild在裏面的一個ID內的UL裏面的UL?

<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]); 
} 

IM還挺新的JavaScript的DOM,所以如果有更好的方法可以做到,請告訴我。

注:我想這樣做沒有任何一種js框架。

+0

您的代碼是否產生任何可見結果? – inkedmn 2010-06-14 22:57:02

+0

你不需要onclick開頭的「javascript:」 - 你只需要,如果它在href中。它也缺少函數調用 - 應該是deleteEmail() – jimr 2010-06-14 23:59:05

+0

哦,是的,我輸入並忘了添加(),謝謝 – Prozaker 2010-06-15 15:56:46

回答

3

最正確的:

var ul = document.getElementById('emails').getElementsByTagName('ul')[0]; 
var li = ul.getElementsByTagName('li')[0]; 
ul.removeChild(li) 
+0

是的,這個作品謝謝! – Prozaker 2010-06-15 16:00:54

3

1)更多正確的字符串:

var ul = document.getElementById('emails').getElementsByTagName('ul')[0]; 

2)應注意,在 「ul.childNodes [I]的」 i將是0的空格,1 <li>email1</li> ,2表示空間等。如果您僅在<li> s有興趣,您應該使用ul.getElementsByTagName('li')[i]。

+0

感謝您的額外解釋,真的很有幫助! – Prozaker 2010-06-15 20:22:18

1

DOM節點的子節點包含文本和註釋,而不僅僅是元素,所以爲了找出要刪除的元素的索引,需要考慮它們。在你的情況下,<ul>中第一個<li>的索引是1

的DOM你`電子郵件」 DIV的樣子:

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); 
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]); 
} 
1

如果你把字符串「電子郵件#」到鏈接...東西像這樣:

<a href="" onClick="removeElement(this.parentNode);return false">email1</a>

有了類似這樣的功能。

function removeElement(childElm) { 
    var parentElm = childElm.parentNode; 
    parentElm.removeChild(childElm); 
} 

儘管您可以使用removeElement()而不使用onClick,但我只是喜歡它允許的簡單性。

+1

或只是onclick =「parentNode.removeChild(this)」 – thorn 2010-06-15 16:11:43

+0

這也非常有幫助,我一定會使用基於這個的解決方案。 – Prozaker 2010-06-15 23:14:48

+0

@thorn - 這是一個非常好的簡單解決方案。我喜歡。 – 2010-06-16 15:37:18