Это, по-видимому, не работает:
X = $td.text();
if (X == ' ') {
X = '';
}
Есть ли что-то о неразрывном пространстве или амперсанде, которое не нравится JavaScript?
Это, по-видимому, не работает:
X = $td.text();
if (X == ' ') {
X = '';
}
Есть ли что-то о неразрывном пространстве или амперсанде, которое не нравится JavaScript?
- это объект HTML. При выполнении .text()
все объекты HTML декодируются до их значений символов.
Вместо сравнения с использованием сущности сравните с использованием фактического сырого символа:
var x = td.text();
if (x == '\xa0') { // Non-breakable space is char 0xa0 (160 dec)
x = '';
}
Или вы также можете создать символ из символьного кода вручную в его безвозвратной форме:
var x = td.text();
if (x == String.fromCharCode(160)) { // Non-breakable space is char 160
x = '';
}
Дополнительная информация о String.fromCharCode
доступна здесь:
Более подробную информацию о кодах символов для разных кодировок можно найти здесь:
Помните, что .text()
разделяет разметку, поэтому я не думаю, что вы найдете
в результате без разметки.
Сделано в ответ....
var p = $('<p>').html(' ');
if (p.text() == String.fromCharCode(160) && p.text() == '\xA0')
alert('Character 160');
Показывает предупреждение, так как вместо него возвращается эквивалент ASCII разметки.
Этот объект преобразуется в char, который он представляет, когда браузер отображает страницу. JS (jQuery) считывает отображаемую страницу, поэтому она не будет сталкиваться с такой текстовой последовательностью. Единственный способ, с которым он мог столкнуться, - это если вы являетесь объектами с двойной кодировкой.
Документы jQuery для text()
говорят
Из-за различий в парсерах HTML в разных браузерах текст возврат может отличаться в новых символах и другое пустое пространство.
Вместо этого я использовал бы $td.html()
.