2010-07-16 36 views
8

Hãy xem xét đoạn HTML sau:Chỉ chọn văn bản của một phần tử (không phải là văn bản của trẻ em của mình/cháu)

<td> 
    Some Text 
    <table>.....</table> 
</td> 

tôi cần phải thao tác "Một số văn bản" văn bản của td phần tử. Tôi không nên chạm vào phần tử bảng bên trong số td này.

Vì vậy, ví dụ: có thể tôi muốn thay thế tất cả "e" bằng "@". Tôi đã thử một vài cách tiếp cận với .text() và .html() của jQuery. Tôi dường như luôn luôn chọn một cái gì đó từ bên trong bảng con, mà tôi không nên chạm vào. Ngoài ra, thật không may, tôi không thể quấn "Một số văn bản" vào một khoảng hoặc một div.

+1

Tôi không chắc tại sao Karim xóa câu trả lời của anh ấy, vì vậy tôi đang đặt câu trả lời này trong một nhận xét. Có gì sai với '$ ('# myCell') [0] .firstChild.data = $ ('# x') [0] .firstChild.data.replace ('e', '@');'. Điều duy nhất tôi có thể nhìn thấy là nó có thể không inculde tất cả các đối tượng văn bản. –

Trả lời

7
$(function(){ 
    $('td').contents().each(function(){ 
    if(this.nodeType === 3) 
     $(this).replaceWith(this.wholeText.replace(/e/g, '#')); 
    }); 
}); 

hoặc thích bạn đề nghị

$('td').contents().each(function(){ 
    if(this.nodeType === 3) 
    this.data = this.wholeText.replace(/e/g, '#'); 
}); 

.contents() cung cấp tất cả yếu tố, textNodes bao gồm.

+0

+1, tôi không biết về 'nội dung'. – karim79

+0

Cảm ơn bạn, jAndy. Tôi đang gặp sự cố khi đặt văn bản thành giá trị mới. .text ('giá trị mới') không làm gì cả. – Dimskiy

+0

ok! this.data = 'văn bản mới'; thủ thuật – Dimskiy

4

Nếu bạn muốn làm một cái gì đó cho mỗi mảnh của văn bản trong td, bạn chỉ có thể lặp qua chúng với một vòng lặp:

var nodes=tdEl.childNodes; 
for(var i=0; i<nodes.length; ++i){ 
    if(nodes[i].nodeType===3){ // 3 means "text" 
    nodes[i].data = nodes[i].wholeText.replace(/e/g, '@'); 
    } 
} 

đã tôi hiểu những gì bạn đang tìm kiếm một cách chính xác?

Bạn có thể sử dụng jQuery nếu bạn đã tải nó cho các công cụ khác, nhưng tôi sẽ không tải trong thư viện 24kb cho một chút mã nhỏ ở trên.

+0

Cảm ơn bạn, lucideer. Tôi có jQuery đã có trong dự án đó, do đó, một giải pháp jQuery là tốt là tốt. Tôi không thể đặt văn bản bằng .wholeText. Tôi nhận được Lỗi: thiết lập thuộc tính chỉ có một getter – Dimskiy

+0

ok! nút [i] .data = 'văn bản mới'; làm thủ thuật – Dimskiy

+0

Cập nhật: nút [i] .data sẽ hiển thị thẻ html dưới dạng văn bản. – Dimskiy

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