Как неразрывный пробел представлен в строке JavaScript?


111

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

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

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


1
Не работает как? Что вы тогда делаете с X?
Эрик Форбс

О, если я скажу X = $ td.html (), это сработает.
Филлип Сенн

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

1
Возможно, я ошибаюсь, но разве text () не расширяет html-сущности?
Деннис Кременский

@Brad - ты должен был дать такой ответ. = P
Эрик Форбс

Ответы:


253

 это объект 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

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

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


@cobbal: Совершенно верно ... На самом деле это был бы более простой способ.
Эндрю Мур

3
Вот это да. Этот ответ настолько сложен, что он должен быть правильным! (Я и JavaScript подобны маслу и воде). Но, может быть, если я сильно встряхнусь, мы смешаемся вместе.
Филлип Сенн,

Обычные пробелы ломаются, так что это '\ x20', но лучше использовать ''.
Патрик Салапски

7

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

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

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

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


2
Используя jQuery, мы видим, что это $("<div>&nbsp;</div>").text().charCodeAt()дает 160(unicode для nbsp)
cobbal 08

2

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


0

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

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

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


Это добавит теги HTML в разметку вашей страницы. Например, строка «<text>» будет элементом html.
Barh
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.