2010-11-09 81 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(), '');