2010-11-09 92 views
0

我有一個DOM結構如下所示:javascript/jquery ::獲取文本值?

<a>abc<span>def</span></a>

我希望得到來自<a>標籤的文本,當我點擊它。

但是,當使用this.text我得到abcdef,而不是隻有abc

我該如何得到僅僅是<a>的文本值?

我要不要這樣做,然後做一個substr()的長度<span>的文本?

回答

3

另一種選擇:

var text = $("a").contents().filter(function() { return this.nodeType == Node.TEXT_NODE; }).text(); 
+0

我注意到下面尼克的人讓一個克隆,因此額外的對象。這種方法是否也會產生額外的對象? – Hailwood 2010-11-09 01:39:55

+0

不,它不會創建額外的對象。 – 2010-11-09 01:45:53

2

您可以通過從一個.clone().text()沒有在那裏的子元素,這樣做:

$("a").click(function() { 
    var text = $(this).clone().children().remove().end().text(); 
}); 

You can test it out here

0

如果是這樣的實際結構(<a>文字<span>之前推出),你可以這樣做:

$('a').click(function() { 
    var txt = this.firstChild.nodeValue; 
}); 

這將是非常快的,但同樣,它假定文本始終是第一位的,並且它沒有被其他元素分割。

0

而不是使用庫走DOM,你可以只要求瀏覽器爲你做它:

var string = element.innerText || element.textContent; 

這應該在所有基於WebKit瀏覽器,火狐,IE和Opera工作。

+2

這仍然會給你「abcdef」。 – 2010-11-09 09:23:14

0

另一種選擇:

var text = $('a').text().replace($('a span').text(), '');