Почему символ javascript String whitespace не соответствует?

Я получил в html следующую конструкцию:

<div id="text">


       some&nbsp;text


   </div>

Если я обрезаю текст и протестирую его с помощью

$("#text").text().trim() === "some text"

он возвращает false также

$("#text").text().trim() === "some&nbsp;text"

возвращает false но

/^some\s{1}text$/.test($("#text").text().trim())

возвращает значение true. Поэтому, пожалуйста, скажите мне, что здесь не так.

Как вы могли бы предположить, я использую jQuery (1.6).

Ответ 1

Это потому, что свободное пространство (charCode 160) не точно равно пространству (charCode 32)

jquery .text() кодирует объекты HTML к их эквивалентности в прямом юникоде, и поэтому &nbsp; становится String.fromCharCode(160)

Вы можете решить это, заменив все неразрывные пробелы обычными пространствами:

d.text().replace(String.fromCharCode(160) /* no breaking space*/,
         " " /* ordinary space */) == "some text"

или еще лучше:

d.text().replace(/\s/g /* all kinds of spaces*/,
         " " /* ordinary space */) == "some text"

Ответ 2

&nbsp; не совпадает с символом пробела (Unicode U + 0020). Это неразрывный пробельный символ, закодированный в Unicode как U + 00A0. Вот почему первый из ваших тестов не соответствует, но третий делает; \s соответствует всем символам пробела.

Либо придерживайтесь теста регулярных выражений, либо используйте \u00a0 или \xa0 в вашей проверке равенства:

$("#text").text().trim() === "some\xa0text";
$("#text").text().trim() === "some\u00a0text";

Ответ 3

Он не учитывает невидимые "\n". Избавьтесь от "\n" и проверьте его с помощью "==".

Попробуйте это

 var x = $("#text").html();
            x = x.replace(/(\r\n|\n|\r)/gm, "");
            x = x.replace(/\s+/g, '');
            alert(x);

            if (x == 'some&nbsp;text') {
                alert('true');
            }
            else {
                alert('false');
            }

Надеюсь, что это поможет.

Ответ 4

Есть несколько подобных вопросов. Вы можете проверить их.

Соответствие jquery.text() в & nbsp; неразрушающий пробел

Как упоминалось в предыдущих сообщениях. Вы можете сравнить с "==" вместо "===" и использовать "\ xa0" для сравнения &nbsp;, который является фактическим символом для неразрывного пространства.