2015-09-16 193 views
3

我試圖獲取給定元素的第一個和最後一個節點。防止.lastChild返回回車?

document.getElementById('test').firstChild 
document.getElementById('test').lastChild 

http://codepen.io/FezVrasta/pen/gaPJXe

的問題是lastChild功能回到我只是一個回車符,而不是最後的有用節點。

什麼是最好的方式返回我最後一個元素或文本節點,不包括回車?

+0

嘗試中'test' – freefaller

+0

我不能刪除子元素之間的所有空白支持編輯源代碼,我必須使用javascript。 –

+1

如果您想要最後一個元素,而不是最後一個子元素(如果該子元素可以是文本節點),則向後循環遍歷所有子元素,直到找到一個元素爲止。 – Quentin

回答

1

通過previousSibling s直到找到一個元素節點。

nodeType == 1意味着它是一個元素節點......看到documention for all types

var lastElement = document.getElementById('test').lastChild; 
 
while (lastElement != null && lastElement.nodeType != 1) { 
 
    lastElement = lastElement.previousSibling; 
 
} 
 
if (lastElement != null) { 
 
    document.getElementById("output").innerHTML = lastElement.id; 
 
}
<div id="test"> 
 
    <div id="div1">a</div> 
 
    <div id="div2">b</div> 
 
    <div id="div3">c</div> 
 
    <div id="div4">d</div> 
 
</div> 
 
<div id="output"></div>

5

lastChildfirstChild返回元素的第一個和最後一個子節點,這可以是一個元素,文本節點或評論。如果你想獲得第一和最後一個子元素,你可以使用:

document.getElementById('test').firstElementChild 
document.getElementById('test').lastElementChild 

應該在所有現代瀏覽器

+1

不知道是否存在...雖然如果你需要支持IE8及以下(是的,我知道,但我們中的一些人仍然不幸)它不會工作 – freefaller

+0

謝謝,但我更尋找一種方法來獲得不包括回車的lastChild,我甚至想要文本節點。 –