พื้นที่ที่ไม่ทำลายจะแสดงในสตริง JavaScript อย่างไร


111

เห็นได้ชัดว่าสิ่งนี้ไม่ทำงาน:

X = $td.text();
if (X == ' ') {
X = '';
}

มีบางอย่างเกี่ยวกับพื้นที่ที่ไม่ทำลายหรือเครื่องหมายและที่ JavaScript ไม่ชอบหรือไม่?


1
ไม่ทำงานอย่างไร แล้วคุณกำลังทำอะไรกับ X?
Erik Forbes

โอ้ถ้าฉันบอกว่า X = $ td.html () ใช้ได้
Phillip Senn

8
โปรดจำไว้ว่า.text()ตัดมาร์กอัปออกดังนั้นฉันไม่เชื่อว่าคุณจะพบ ในผลลัพธ์ที่ไม่ใช่มาร์กอัป
Brad Christie

1
ฉันอาจจะผิดที่นี่ แต่ text () ไม่ขยายเอนทิตี html?
Dennis Kreminsky

@ แบรด - คุณน่าจะตอบได้ = P
Erik Forbes

คำตอบ:


253

 เป็นเอนทิตี HTML เมื่อทำเช่น.text()นั้นเอนทิตี HTML ทั้งหมดจะถูกถอดรหัสเป็นค่าอักขระ

แทนที่จะเปรียบเทียบโดยใช้เอนทิตีให้เปรียบเทียบโดยใช้อักขระดิบจริง:

var x = td.text();
if (x == '\xa0') { // Non-breakable space is char 0xa0 (160 dec)
  x = '';
}

หรือคุณยังสามารถสร้างอักขระจากโค้ดอักขระด้วยตนเองในรูปแบบ Escape Javascript:

var x = td.text();
if (x == String.fromCharCode(160)) { // Non-breakable space is char 160
  x = '';
}

ดูข้อมูลเพิ่มเติมString.fromCharCodeได้ที่นี่:

fromCharCode - ศูนย์ MDC Doc

ดูข้อมูลเพิ่มเติมเกี่ยวกับรหัสอักขระสำหรับชุดอักขระต่างๆได้ที่นี่:

Windows-1252 Charset
UTF-8 Charset


@cobbal: จริงมาก ... นั่นจะเป็นวิธีที่ง่ายกว่าจริงๆ
Andrew Moore

3
ว้าว. คำตอบนี้ซับซ้อนมากต้องถูก! (ฉันและ JavaScript ก็เหมือนน้ำมันและน้ำ) แต่บางทีถ้าฉันเขย่าอย่างรุนแรงเราจะผสมกัน
Phillip Senn

ช่องว่างทั่วไปแตกดังนั้นจึงเป็น "\ x20" แต่ดีกว่าที่จะใช้ "
Patrick Szalapski

7

โปรดจำไว้ว่า.text()ตัดมาร์กอัปออกดังนั้นฉันไม่เชื่อว่าคุณจะพบ ในผลลัพธ์ที่ไม่ใช่มาร์กอัป

ทำเพื่อคำตอบ ....

var p = $('<p>').html('&nbsp;');
if (p.text() == String.fromCharCode(160) && p.text() == '\xA0')
    alert('Character 160');

แสดงการแจ้งเตือนเนื่องจาก ASCII เทียบเท่ากับมาร์กอัปจะถูกส่งกลับแทน


2
เมื่อใช้ jQuery เราจะเห็นว่า$("<div>&nbsp;</div>").text().charCodeAt()ให้160(unicode for nbsp)
cobbal

2

เอนทิตีนั้นจะถูกแปลงเป็นอักขระที่แสดงเมื่อเบราว์เซอร์แสดงผลเพจ JS (jQuery) อ่านหน้าที่แสดงผลดังนั้นจะไม่พบลำดับข้อความดังกล่าว วิธีเดียวที่จะพบสิ่งนี้คือถ้าคุณเข้ารหัสเอนทิตีสองครั้ง


0

เอกสาร jQuery สำหรับtext()พูดว่า

เนื่องจากรูปแบบของตัวแยกวิเคราะห์ HTML ในเบราว์เซอร์ที่แตกต่างกันข้อความที่ส่งคืนอาจแตกต่างกันไปในบรรทัดใหม่และช่องว่างอื่น ๆ

ฉันจะใช้$td.html()แทน


สิ่งนี้จะเพิ่มแท็ก html ในมาร์กอัปหน้าของคุณ ตัวอย่างเช่นสตริง "<text>" จะเป็นองค์ประกอบ html
Barh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.