2012-06-21 44 views
8

Cách tốt nhất để lấy văn bản ra khỏi phần tử jQuery khi bản thân văn bản tiếp giáp với một phần tử khác có chứa văn bản là gì?Làm cách nào để truy cập văn bản bên trong một phần tử trong khi bỏ qua một số văn bản bên trong thẻ bên cạnh văn bản?

Trong ví dụ này, tôi muốn nhận được tại các văn bản: 'Text tôi muốn' trong khi bỏ qua các văn bản trong phần tử con giáp:

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

Giải pháp của tôi là để có được tất cả các văn bản trong thẻ <span> và sau đó xóa tất cả văn bản trong thẻ <a>. Điều này cảm thấy một chút lúng túng vì vậy tôi tự hỏi nếu có một cách tốt hơn:

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

có thể trùng lặp của [jQuery: sử dụng .text() để lấy chỉ văn bản không lồng trong các thẻ con] (http://stackoverflow.com/questions/3442394/jquery-using-text-to-retrieve -only-text-not-lồng nhau-trong-con thẻ) –

Trả lời

7

Bạn phải đi đến các hạch văn bản cho việc này:

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

http://jsfiddle.net/UeBZq/

+2

Tôi luôn luôn quên rằng các nút văn bản ''nodeType === 3', độc đáo thực hiện. Có thể thêm rằng nếu OP muốn cắt ngắt dòng và khoảng cách thêm trước/sau văn bản mà anh ta muốn, bạn có thể sử dụng ['$ .trim'] (http://api.jquery.com/jQuery.trim/) - [ fiddle] (http://jsfiddle.net/ult_combo/UeBZq/2/). –

+1

Thật tuyệt vời! Chỉ cần FYI: nếu bạn có thể đảm bảo rằng các textnode sẽ luôn luôn là yếu tố đầu tiên (trước khi bất kỳ elms con) .. bạn chỉ có thể tham khảo nó trực tiếp mà không cần phải lọc như vậy: '' var text_i_want = $ ("span") .contents() [0] '' .. Hoặc bạn có thể sử dụng '' .first() '' nếu bạn muốn giữ chuỗi các phương thức jQuery. –

2

xóa thẻ và nhận nội dung span. 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

Tại sao 'JSON.stringify'? bạn có thể sử dụng '$ ('span'). text()'. –

+0

Tôi dint chăm sóc để refactor này ngay sau khi nó làm việc :) Làm sạch nó ngay bây giờ! –

Các vấn đề liên quan