Bagaimana spasi non-breaking direpresentasikan dalam string JavaScript?


111

Ini tampaknya tidak berfungsi:

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

Apakah ada sesuatu tentang spasi non-breaking atau ampersand yang tidak disukai JavaScript?


1
Tidak bekerja bagaimana? Lalu apa yang kamu lakukan dengan X?
— Erik Forbes

Oh, jika saya mengatakan X = $ td.html () itu berhasil.
— Phillip Senn

8
Ingatlah bahwa .text()menghapus markup, jadi saya tidak percaya Anda akan menemukan  hasil non-markup.
— Brad Christie

1
Saya mungkin salah di sini, tetapi bukankah text () memperluas entitas html?
— Dennis Kreminsky

@Brad - Anda seharusnya membuat jawaban itu. = P
— Erik Forbes

Jawaban:


253

 adalah entitas HTML. Saat melakukannya .text(), semua entitas HTML didekodekan ke nilai karakternya.

Daripada membandingkan menggunakan entitas, bandingkan menggunakan karakter mentah yang sebenarnya:

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

Atau Anda juga dapat membuat karakter dari kode karakter secara manual dalam bentuk pelolosan Javascript:

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

Informasi lebih lanjut tentang String.fromCharCodetersedia di sini:

fromCharCode - MDC Doc Center

Informasi lebih lanjut tentang kode karakter untuk rangkaian karakter yang berbeda tersedia di sini:

Windows-1252 Charset
UTF-8 Charset


@cobbal: Benar sekali ... Sebenarnya itu akan menjadi cara yang lebih sederhana.
— Andrew Moore

3
Wow. Jawaban ini sangat rumit, pasti benar! (Saya dan JavaScript seperti minyak dan air). Tapi mungkin jika aku diguncang dengan keras kita akan bercampur.
— Phillip Senn

Ruang biasa rusak, jadi ini '\ x20', tetapi lebih baik digunakan ''.
— Patrick Szalapski

7

Ingatlah bahwa .text()menghapus markup, jadi saya tidak percaya Anda akan menemukan  hasil non-markup.

Dibuat dengan jawaban ....

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

Menampilkan peringatan, karena ASCII yang setara dengan markup dikembalikan.


2
Menggunakan jQuery kita dapat melihat bahwa $("<div>&nbsp;</div>").text().charCodeAt()memberi 160(unicode untuk nbsp)
— cobbal

2

Entitas itu diubah menjadi karakter yang diwakilinya saat browser merender halaman. JS (jQuery) membaca halaman yang dirender, sehingga tidak akan menemukan urutan teks seperti itu. Satu-satunya cara untuk menemukan hal seperti itu adalah jika Anda merupakan entitas pengkodean ganda.


0

Dokumen jQuery untuk text()kata

Karena variasi dalam parser HTML di browser yang berbeda, teks yang dikembalikan mungkin berbeda di baris baru dan ruang kosong lainnya.

Saya akan menggunakan $td.html()sebagai gantinya.


Ini akan menambahkan tag html ke markup halaman Anda. Misalnya, string '<text>' akan menjadi elemen html.
— Barh
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.