Ini tampaknya tidak berfungsi:
X = $td.text();
if (X == ' ') {
X = '';
}
Apakah ada sesuatu tentang spasi non-breaking atau ampersand yang tidak disukai JavaScript?
sumber
Ini tampaknya tidak berfungsi:
X = $td.text();
if (X == ' ') {
X = '';
}
Apakah ada sesuatu tentang spasi non-breaking atau ampersand yang tidak disukai JavaScript?
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.fromCharCode
tersedia di sini:
Informasi lebih lanjut tentang kode karakter untuk rangkaian karakter yang berbeda tersedia di sini:
Ingatlah bahwa .text()
menghapus markup, jadi saya tidak percaya Anda akan menemukan
hasil non-markup.
Dibuat dengan jawaban ....
var p = $('<p>').html(' ');
if (p.text() == String.fromCharCode(160) && p.text() == '\xA0')
alert('Character 160');
Menampilkan peringatan, karena ASCII yang setara dengan markup dikembalikan.
$("<div> </div>").text().charCodeAt()
memberi 160
(unicode untuk nbsp)
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.
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.
.text()
menghapus markup, jadi saya tidak percaya Anda akan menemukan
hasil non-markup.