web-dev-qa-db-fra.com

Pourquoi le caractère d'espacement de la chaîne javascript nbsp; ne pas correspondre?

J'ai obtenu en html la construction suivante:

<div id="text">


       some&nbsp;text


   </div>

Si je coupe le texte et le teste avec:

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

il retourne faux aussi

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

renvoie faux mais

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

renvoie vrai. Alors, dites-moi ce qui ne va pas ici.

Comme vous le suggérez, j'utilise jQuery (1.6).

18
alpham8

C'est parce que l'espace sans rupture (charCode 160) n'est pas exactement égal à l'espace (charCode 32)

.text() de jquery code les entités HTML en leur équivalence directe unicode, et donc &nbsp; devient String.fromCharCode(160)

Vous pouvez le résoudre en remplaçant tous les espaces insécables par des espaces ordinaires:

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

ou mieux encore:

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

&nbsp; n'est pas le même que le caractère espace (Unicode U + 0020). C'est un caractère d'espace insécable, codé en Unicode comme U + 00A0. C'est pourquoi le premier de vos tests ne correspond pas, mais le troisième le fait; \s correspond à tous les caractères d'espace blanc.

Respectez votre test d'expression régulière ou utilisez \u00a0 ou \xa0 dans votre contrôle d'égalité:

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

Il ne tient pas compte des "\ n" qui sont invisibles. Débarrassez-vous du '\ n' et vérifiez-le avec '=='.

Essaye ça

 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');
            }

J'espère que cela t'aides.

3
A J

Il y a quelques questions similaires. Vous pouvez les consulter.

Correspondance de jquery .text () à nbsp;espace insécable

Comme mentionné dans les articles précédents. Vous pouvez comparer avec "==" au lieu de "===" et utiliser '\ xa0' pour comparer &nbsp; qui est le caractère réel de l'espace insécable.

2
anirudh