用JavaScript來封裝文本元素節點,javascript節點
原文連結: Wrapping Text Nodes and Elements with JavaScript原文日期: 2014-09-04翻譯日期: 2014-09-06翻譯人員: 鐵錨
當你的應用需要依賴某個特定的JavaScript類庫時,你無意中總會試圖解決某些類庫自身的問題,而不是語言的問題。就比如當我試圖將文本(可能也包含HTML元素)用一個DIV元素包起來時。假設有以下HTML:
This is some text and <a href="">a link</a>.
這時候如果想把它轉換為下面這樣:
<div>This is some text and <a href="">a link</a>.<div>
最簡單暴力的方法是,你可以在父元素上通過
.innerHTML 屬性來執行更新,但問題是這樣一來所有綁定的事件監聽都會失效,因為使用
innerHTML 時會重新建立一個HTML元素。這真是個大玻璃杯!所以這時候只能利用JavaScript來實現 —— 尺有所短、寸有所長。下面是實現代碼:
var newWrapper = document.createElement('div');while(existingParent.firstChild) { // 移動DOM元素,不會建立新元素 newWrapper.appendChild(existingParent.firstChild);}
這裡不能使用for迴圈,因為
childNodes 是一個動態節點群組成的集合,只要移動節點就會影響到他的index索引值。我們用
while迴圈一直檢測父元素的
firstChild ,如果其返回一個代表 false 的值, 那麼你就知道所有的節點都已經移到新的parent中了!
javascript 怎擷取節點文本值?
getElementsByTagName("標籤名稱") 代表查詢返回所有該標籤的元素,因此他是個集合
document.getElementsByTagName("標籤") 即查詢文檔中所有的該標籤元素
alert(document.getElementsByTagName("div").length) 返回查詢結果的數量,這裡結果為 1
你想要該元素的文本應該這麼寫 document.getElementsByTagName("div")[0].innerHTML
取第一個div的html文本
============================
其他樣本
<html>
<head><title>test</title></head>
<script type="text/javascript">
//搜尋文檔下第一個div下的span子節點
window.onload = function () {//文檔載入完畢事件
var div1 = document.getElementsByTagName("div")[0];//文檔第一個DIV
var spans = div1.getElementsByTagName("span");//該DIV下的所有SPAN標籤元素
for (var i = 0; i < spans.length; i++) {//迴圈彈出每個SPAN標籤的文本
alert(spans[i].innerHTML);
}
}
</script>
<body>
<div><span>文本1</span><span>第二個文本</span><span>文本三</span></div>
</body>
</html>
javascript裡nodetype 有3個 節點 1代表元素節點,2代表屬性節點,3代表文本節點,怎不同
nodeType是用來獲得當前節點對象的類型。
nodeType 屬性可返回節點的類型。
元素element 1
屬性attr 2
文本text 3
注釋comments 8
文檔document 9
比如
html:<h1 id="h1">An HTML Document</h1>
js: var element=document.getElementById("h1");//h1是一個<h1>標籤
var type = element.nodeType; // 此時返回的nodeType=1,type = 1。
以此類推