2012-06-21 10 views
8

テキスト自体がテキストを含む別の要素に隣接している場合、jQuery要素からテキストを取得するにはどうすればよいでしょうか?テキスト内のタグ内のテキストを無視して、要素内のテキストにアクセスするにはどうすればよいですか?

この例では、私はテキストで取得したい:隣接する子要素内のテキストを無視して「私がしたいテキスト」:

<span> 
    <a>Text I want to ignore</a> 
    Text I want 
</span> 

私のソリューションは<span>タグ内のすべてのテキストを取得することでした<a>タグ内のすべてのテキストを削除します。これは少しぎこちない感じているので、より良い方法があれば、私は思ったんだけど:あなたはこのためにテキストノードに行かなければなら

var all_the_text = $('span').text(); 
var the_text_i_dont_want = $('span').find('a').text(); 
var text_i_want = all_the_text.replace(the_text_i_dont_want, ''); 
+0

の可能性のある重複した[jQueryの:子タグにネストされていないテキストのみを取得するには()を使用しての.text](http://stackoverflow.com/questions/3442394/jquery-using-text-to-retrieve -only-text-non-nested-in-child-tags) –

答えて

7

var text_i_want = $("span").contents().filter(function(){ 
    return this.nodeType === 3; 
}).text();​ 

http://jsfiddle.net/UeBZq/

+2

私は、テキストノードの 'nodeType === 3'をよく忘れています。あなたが望むテキストの前/後に行区切りと余分なスペースをトリミングしたい場合は、['$ $ .trim'](http://api.jquery.com/jQuery.trim/) - [フィドル](http://jsfiddle.net/ult_combo/UeBZq/2/)。 –

+1

これは素晴らしいです!ちょうどFYI:textnodeが常に最初の要素(子elmsの前)であることを保証できれば、それをフィルタリングする必要なしに直接参照することができます: '' var text_i_want = $( "span") .contents()[0] '' ..または、jQueryメソッドを連鎖させたい場合は、 '' .first() ''を使うことができます。 –

2

タグを削除してスパンの内容を取得します。 Working Demo

<span> 
    <a>Text I want to ignore</a> 
    Text I want 
</span>​ 

var all_the_text = $('span').find('a').remove(); 
alert($('span').text()); 
+0

なぜ 'JSON.stringify'ですか? '$( 'span').text()'を使うことができます。 –

+0

私はそれが働くとすぐにこれをリファクタリングすることを心配しました:)それを今清掃してください! –

関連する問題