Неразрывное пространство

Это, по-видимому, не работает:

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

Есть ли что-то о неразрывном пространстве или амперсанде, которое не нравится JavaScript?

Ответ 1

  - это объект 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 доступна здесь:

fromCharCode - Центр документов MDC

Более подробную информацию о кодах символов для разных кодировок можно найти здесь:

Windows-1252 Charset
UTF-8 Charset

Ответ 2

Помните, что .text() разделяет разметку, поэтому я не думаю, что вы найдете   в результате без разметки.

Сделано в ответ....

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

Показывает предупреждение, так как вместо него возвращается эквивалент ASCII разметки.

Ответ 3

Этот объект преобразуется в char, который он представляет, когда браузер отображает страницу. JS (jQuery) считывает отображаемую страницу, поэтому она не будет сталкиваться с такой текстовой последовательностью. Единственный способ, с которым он мог столкнуться, - это если вы являетесь объектами с двойной кодировкой.

Ответ 4

Документы jQuery для text() говорят

Из-за различий в парсерах HTML в разных браузерах текст возврат может отличаться в новых символах и другое пустое пространство.

Вместо этого я использовал бы $td.html().