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?

Phillip Senn
sumber
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

Andrew Moore
sumber
@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.

Brad Christie
sumber
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.

JAAulde
sumber
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.

Jacob Mattison
sumber
Ini akan menambahkan tag html ke markup halaman Anda. Misalnya, string '<text>' akan menjadi elemen html.
Barh