แทนที่เฉพาะข้อความภายใน div โดยใช้ jquery


104

ฉันมี div เช่น:

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

ฉันพยายามเปลี่ยนเฉพาะข้อความจาก "สวัสดีฉันเป็นข้อความ" เป็น "สวัสดีฉันแทนที่" โดยใช้ jquery นี่อาจจะง่าย แต่ฉันไม่สามารถทำได้

การใช้$('#one').text('')เพียงแค่ล้าง#Onediv ทั้งหมด


การทำซอ
Inkbug

ใช้ $ ('# one'). find ('. first'). text ('สวัสดีฉันแทนที่'); แทน $ ('# one'). text (); หรือคุณสามารถเข้าถึงองค์ประกอบโดยตรงและแทนที่ข้อความโดยใช้ $ ('. first'). text ('สวัสดีฉันแทนที่');
Kartik Chauhan

คำตอบ:


134

ข้อความไม่ควรเป็นของตัวเอง ใส่ลงในspanองค์ประกอบ

เปลี่ยนเป็นสิ่งนี้:

<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
สิ่งนี้ไม่ตอบคำถามของ OP ซึ่งไม่ได้บอกว่าพวกเขามีอำนาจควบคุม HTML
tar

1
วิธีนี้ใช้งานได้ แต่จะแน่ใจได้อย่างไรว่าจะดำเนินการหรือไม่? ฉันสามารถเรียกใช้ข้อยกเว้นได้หรือไม่หากว่างเปล่าหรือแท็กเปลี่ยนไป ในการผูกไม่สำเร็จเนื่องจาก div นี้สร้างขึ้นโดย code.from REST หรือฐานข้อมูล
saber tabatabaee yazdi

122

ค้นหาโหนดข้อความ ( nodeType==3) และแทนที่textContent:

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

ตัวอย่างสด: http://jsfiddle.net/VgFwS/


6
ตอบโจทย์มากจริงๆ!
wcolbert

6
นี่ควรเป็นคำตอบที่ยอมรับได้เนื่องจากไม่ต้องการให้คุณเปลี่ยน html!
Wouter Rutgers

2
@Jamiec FWIW ฉันชอบคำตอบนี้เพราะช่วยให้สามารถเปลี่ยนได้โดยไม่ต้องกังวลเกี่ยวกับการบอร์กมาร์กอัป / สคริปต์ ฯลฯ
sehe

3
สิ่งนี้ใช้ได้ผลอย่างสมบูรณ์สำหรับฉัน บางครั้งเราทำงานในสถานการณ์ที่ไม่อนุญาตให้เปลี่ยน HTML (เช่น SharePoint) ขอบคุณ
Mark P.

14

คุณต้องตั้งค่าข้อความเป็นอย่างอื่นที่ไม่ใช่สตริงว่าง นอกจากนี้ฟังก์ชัน. html () ควรทำในขณะที่รักษาโครงสร้าง HTML ของ div

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

แม้ว่าจะใช้ได้ผลในกรณีนี้ แต่ฉันไม่ชอบตัวเลือกนี้เพราะถ้าคุณแทนที่คำว่า "first" ด้วยคำว่า "second" หรือแค่ "i" ด้วย "มันจะทำให้แท็กของคุณเลอะ
JSON

10

หากคุณรู้จริงว่าข้อความที่คุณกำลังจะแทนที่คุณสามารถใช้ได้

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

http://jsfiddle.net/5rWwh/

หรือ

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

$('#one').contents(':not(*)') เลือกโหนดชายน์ที่ไม่ใช่องค์ประกอบในกรณีนี้โหนดข้อความและโหนดที่สองคือโหนดที่เราต้องการแทนที่

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


2
จากjQuery 1.8.3 $('#one').contents(':not(*)')จะไม่เลือกอะไรเลย
BruceHill

0

อีกแนวทางหนึ่งคือเก็บองค์ประกอบนั้นไว้เปลี่ยนข้อความแล้วต่อท้ายองค์ประกอบนั้นกลับ

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

0

ในกรณีที่คุณไม่สามารถเปลี่ยน HTML ได้ ดั้งเดิมมาก แต่สั้นและใช้งานได้จริง (มันจะว่างเปล่า div พาเรนต์ดังนั้น div ลูกจะถูกลบออก)

$('#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
สิ่งนี้จะลบ div ย่อยทั้งหมดของ #one
Scot Nery เมื่อ

1
@ScotNery ขอบคุณฉันได้อัปเดตคำตอบ (แม้ว่าจะตอบคำถามเฉพาะนี้ในทางเทคนิคก็ตาม) ฉันคิดว่านอกเหนือจากการตัดข้อความด้วยแท็กที่มีรหัสแล้วมันค่อนข้างท้าทาย สิ่งเดียวคือการจับคู่สตริงเพื่อแทนที่ แต่มันเปราะบางจริงๆ
ReturnTable
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.