2012-03-08 19 views
4

我使用這個代碼:jQuery的文本節點對象串

/** 
* Get Text Nodes from an Element 
* Returns and object unless number is passed in 
* Numbers is 0 based 
*/ 
(function($) { 
$.fn.textNodes = function(number) { 
    var nodes = jQuery(this).contents().filter(function(){ 
     return this.nodeType == 3; 
    }); 
    if(jQuery.isNumber(number)){ 
     return nodes[number]; 
    } 
    return nodes; 
}; 
})(jQuery); 

它用來抓取文本節點出HTML

。例如:

<div> 
    <span>Testing</span> 
    What is this? 
</div> 

我尋找What is this?

這可以工作,因爲我可以做一個console.log並在控制檯中查看結果。

但是當我嘗試和使用結果輸入字段中它給我:[object Text]

我如何使用結果作爲字符串值?

我試過toString(),但給出了相同的結果,除非我錯過了一些東西。

回答

2

你的代碼有效,但它並沒有採用jQuery的美。如何:

(function($) { 
    $.expr[':'].textnode = function(element) { 
     return element.nodeType == 3; 
    } 

    $.valHooks["#text"] = { get: function(elem) { 
     return $.trim(elem.nodeValue); 
    }} 

})(jQuery) 

使用這種方式:

lastText = $("div").contents(":textnode:last").val() 

http://jsfiddle.net/YXjEB/

+0

做得非常好 – 2012-03-08 12:00:48

5

使用nodeValue屬性:

$("#yourInputField").val(yourTextNode.nodeValue); 
+0

的'data'屬性是文本節點同樣出色。 – 2012-03-08 11:29:11

+0

這是我的問題的正確答案。我喜歡旋轉thg435給。謝謝! – 2012-03-08 12:24:02

2

您會收到文本節點作爲一個DOM對象是正確的行爲,當你需要的實際文本使用:textContentnodeValue

請參閱jsFiddle

+0

'textContent'沒有在較舊的瀏覽器中實現,包括IE <9。堅持使用'nodeValue'或'data',這兩者都可用於所有主流瀏覽器。 – 2012-03-08 11:28:40