2012-08-08 25 views
82

Tôi có một div như:Thay thế chỉ văn bản bên trong một div sử dụng jquery

<div id="one"> 
     <div class="first"></div> 
     "Hi I am text" 
     <div class="second"></div> 
     <div class="third"></div> 
</div> 

Tôi cố gắng để thay đổi chỉ có văn bản từ "Hi Tôi văn bản" đến "Hi Tôi đang thay thế" sử dụng jquery. Điều này có thể dễ dàng nhưng tôi không thể làm được.

Sử dụng $('#one').text('') chỉ đổ toàn bộ #One div.

+0

Nó có thể hữu ích để thực hiện một [fiddle] (http://jsfiddle.net) – Inkbug

+0

Sử dụng $ ('# one'). Tìm ('. First'). ('Xin chào tôi thay thế'); thay vì $ ('# one'). văn bản(); hoặc bạn có thể trực tiếp truy cập vào phần tử và thay thế văn bản bằng cách sử dụng $ ('. first') văn bản ('Hi I am replace'); –

Trả lời

109

văn bản không nên có ngày của riêng mình. Đặt nó vào một yếu tố span.

Thay đổi nó như thế này:

<div id="one"> 
     <div class="first"></div> 
     <span>"Hi I am text"</span> 
     <div class="second"></div> 
     <div class="third"></div> 
</div> 
$('#one span').text('Hi I am replace'); 
+21

Điều này không trả lời câu hỏi của OP, người không nói rằng họ có quyền kiểm soát HTML. – tar

+0

điều này được làm việc nhưng làm thế nào có thể chắc chắn để thực hiện hay không? tôi có thể chạy ngoại lệ nếu trống hoặc thẻ đã thay đổi không? trong bindings không thành công vì đây div tạo ra bởi REST của code.from hoặc cơ sở dữ liệu –

11

Bạn cần phải thiết lập các văn bản để một cái gì đó khác hơn là một chuỗi rỗng. Ngoài ra, hàm .html() nên làm điều đó trong khi vẫn giữ cấu trúc HTML của div.

$('#one').html($('#one').html().replace('text','replace')); 
+0

Trong khi điều này có thể làm việc trong trường hợp này, tôi không thích tùy chọn này vì nếu bạn đã thay thế chữ "đầu tiên" với từ "thứ hai" hay chỉ 'i' với '' nó sẽ làm hỏng thẻ của bạn – JSON

84

Tìm các nút văn bản (nodeType==3) và thay thế textContent:

$('#one').contents().filter(function() { 
    return this.nodeType == 3 
}).each(function(){ 
    this.textContent = this.textContent.replace('Hi I am text','Hi I am replace'); 
}); 

Sống dụ: http://jsfiddle.net/VgFwS/

+5

Câu trả lời thực sự tuyệt vời! – wcolbert

+2

Đây phải là câu trả lời được chấp nhận vì điều này không yêu cầu bạn thay đổi html! –

+1

@Jamiec FWIW Tôi thích câu trả lời này bởi vì nó cho phép thay thế mà không phải lo lắng về việc bóc tách các đánh dấu/tập lệnh, vv – sehe

7

Nếu bạn thực sự biết những văn bản bạn đang đi để thay thế bạn có thể sử dụng

$('#one').contents(':contains("Hi I am text")')[0].nodeValue = '"Hi I am replace"'; 

http://jsfiddle.net/5rWwh/

Hoặc

$('#one').contents(':not(*)')[1].nodeValue = '"Hi I am replace"'; 

$('#one').contents(':not(*)') chọn phi yếu tố nút con trong trường hợp này các nút văn bản và nút thứ hai là một trong chúng ta muốn thay thế.

http://jsfiddle.net/5rWwh/1/

+1

Từ 'jQuery 1.8.3'' $ ('# one'). Content (': not (*)') 'sẽ không chọn gì cả. – BruceHill

0

Một cách khác là giữ yếu tố đó, thay đổi văn bản, sau đó nối thêm yếu tố đó lại

const star_icon = $(li).find('.stars svg') 
$(li).find('.stars').text(repo.stargazers_count).append(star_icon) 
Các vấn đề liên quan