Chỉ thay thế văn bản bên trong một div bằng jquery


104

Tôi có một div như:

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

Tôi đang cố gắng chỉ thay đổi văn bản từ "Xin chào, tôi là văn bản" thành "Xin chào, tôi thay thế" bằng cách 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ỉ làm trống toàn bộ #Onediv.


Có thể hữu ích nếu bạn thực hiện một trò đùa
Inkbug

Sử dụng $ ('# one'). Find ('. First'). Text ('Xin chào, tôi là người thay thế'); thay vì $ ('# one'). text (); hoặc bạn có thể truy cập trực tiếp vào phần tử và thay thế văn bản bằng cách sử dụng $ ('. first'). text ('Xin chào, tôi là người thay thế');
Kartik Chauhan

Câu trả lời:


134

Văn bản không nên tự có. Đặt nó vào một spanphần tử.

Thay đổi nó thà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');

51
Đ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

1
đ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ì div này được tạo ra bởi REST của code.from hoặc cơ sở dữ liệu
saber tabatabaee Yazdi

122

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');
});

Ví dụ trực tiếp: http://jsfiddle.net/VgFwS/


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

6
Đâ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!
Wouter Rutgers

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

3
Điều này làm việc hoàn hảo cho tôi. Đôi khi chúng tôi làm việc trong các tình huống không cho phép thay đổi HTML (tức là SharePoint). Cảm ơn
Mark P.

14

Bạn cần đặt văn bản thành một cái gì đó khác với một chuỗi rỗng. Ngoài ra, hàm .html () sẽ làm điều đó trong khi vẫn bảo toàn cấu trúc HTML của div.

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

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ộn xộn lên thẻ của bạn
JSON

10

Nếu bạn thực sự biết văn bản bạn sẽ 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 là

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

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

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


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

0

Một cách tiếp cận khác là giữ nguyên phần tử đó, thay đổi văn bản, sau đó nối phần tử đó lại

const star_icon = $(li).find('.stars svg')
$(li).find('.stars').text(repo.stargazers_count).append(star_icon)

0

Đề phòng nếu bạn không thể thay đổi HTML. Rất sơ khai nhưng ngắn và hoạt động. (Nó sẽ làm trống div cha do đó div con sẽ bị xóa)

$('#one').text('Hi I am replace');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

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


1
Điều này loại bỏ tất cả các div con của #one
Scot Nery

1
@ScotNery cảm ơn bạn, tôi đã cập nhật câu trả lời. (Mặc dù về mặt kỹ thuật nó trả lời câu hỏi cụ thể này) Tôi giả định rằng ngoài việc gói văn bản bằng một thẻ có id, nó sẽ khá khó khăn. Chỉ có điều khác là phải đấu một sợi dây để thay thế, nhưng nó thực sự rất mỏng manh.
ReturnTable
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.