Як представлений нерозривний простір у рядку JavaScript?


111

Це, мабуть, не працює:

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

Чи є щось про нерозривний простір або амперсанд, який JavaScript не любить?


1
Як не працює? Що ви тоді робите з X?
Ерік Форбс

О, якщо я скажу X = $ td.html (), це працює.
Філіп Сенн

8
Пам'ятайте, що .text()викреслює розмітку, тому я не вірю, що ви знайдете  результат без розмітки.
Бред Крісті

1
Я можу помилятися тут, але чи не текст () розширює 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 Charset
UTF-8 Charset


@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 for nbsp)
cobbal

2

Ця суть перетворюється на таблицю, яку вона представляє, коли браузер надає сторінку. JS (jQuery) читає надану сторінку, таким чином, вона не зустріне такої послідовності тексту. Єдиний спосіб, з яким він може зіткнутися з таким, - це якщо ви двічі кодуєте сутність.


0

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

У зв'язку з різницею HTML-парсерів у різних браузерах повертається текст може відрізнятися в нових рядках та іншому пробілі.

Я б використовував $td.html()замість цього.


Це додасть HTML теги до розмітки вашої сторінки. Наприклад, рядок '<text>' буде елементом html.
Бар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.