неразрывный пробел


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

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

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

4 68

4 ответа:

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

вместо сравнения с использованием сущности, сравните с использованием фактического необработанного символа:

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

или вы также можете создать символ из кода символа вручную в его JavaScript экранированной форме:

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

подробнее о String.fromCharCode здесь:

fromCharCode-MDC Doc Центр

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

Windows-1252 Charset
кодировка UTF-8

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

сделал в ответ....

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

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

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

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

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

Я хотел бы использовать $td.html() вместо.