2011-03-13 20 views
1

我想用jquery查找頁面上的所有文本節點。但無論我選擇什麼元素,該節點類型總是1:javascript nodeType是1,不管是什麼?

$.each($('*'), function(index, el) { console.log(el.nodeType) }); 

這就造成了不過是「1」在控制檯中輸出。並且證明頁面上有一個「文本節點」:

$('p:first').html() 
=> " 
      I'm text 
      " 

$('p:first')[0].nodeType 
=> 1 

我在這裏丟失了什麼?我正在使用safari 5.0.4。我在firefox 3.6.12中得到了相同的結果。

謝謝。

回答

9

jQuery只會選擇元素節點。

$('p:first')實際上選擇了第一個<p>元素。要訪問包含文本節點,你就需要在DOM節點訪問firstChild

alert($('p:first')[0].nodeName) // alerts P     <-- element node 
alert($('p:first')[0].firstChild.nodeName) // alerts #text <-- text node 

DEMO

也許你也有一個誤區:包含文本的元素不是文本節點。您使用標籤<..>創建的每個元素都是元素節點。

實施例:

<p> 
    Foo 
    <span>Bar</span> 
    Baz 
</p> 

元件節點<p>有三個孩子:兩個文本節點,包含文本FooBaz,以及元件節點<span>本身具有文本節點作爲孩子的,包含Bar

+0

的確如此。 jQuery的整個前提是使用類似CSS的選擇器來選擇元素。 – jpsimons 2011-03-13 18:15:03

+1

@Binary Logic這裏是另一個答案,它描述瞭如何使用jQuery查找所有文本節點:http://stackoverflow.com/questions/298750/how-do-i-select-text-nodes-with-jquery/4399718# 4399718 – 2011-03-13 18:17:07