136 votes

Comment un espace insécable est-il représenté dans une chaîne JavaScript ?

Apparemment, cela ne fonctionne pas :

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

Y a-t-il quelque chose à propos d'un espace insécable ou de l'esperluette que JavaScript n'aime pas ?

1 votes

Comment cela ne fonctionne-t-il pas ? Que faites-vous alors avec X ?

0 votes

Oh, si je dis X=$td.html() cela fonctionne.

8 votes

Rappelez-vous que .text() enlève le balisage, donc je ne pense pas que vous allez trouver   dans un résultat sans marquage.

296voto

Andrew Moore Points 49765

  est une entité HTML. Lorsque l'on fait .text() toutes les entités HTML sont décodées en leurs valeurs de caractères.

Au lieu de comparer en utilisant l'entité, comparez en utilisant le caractère brut réel :

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

Vous pouvez également créer le caractère à partir du code du caractère manuellement dans sa forme échappée en Javascript :

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

Plus d'informations sur String.fromCharCode est disponible ici :

fromCharCode - Centre de documentation MDC

De plus amples informations sur les codes de caractères pour les différents jeux de caractères sont disponibles ici :

Jeu de caractères Windows-1252
UTF-8 Charset

0 votes

@cobbal : Très vrai... Ce serait la manière la plus simple en fait.

3 votes

Wow. Cette réponse est si compliquée qu'elle doit être correcte ! (Moi et JavaScript sommes comme l'huile et l'eau). Mais peut-être que si on me secoue violemment, nous nous mélangerons.

0 votes

Les espaces ordinaires se brisent, c'est donc ' \x20 ', mais il est préférable d'utiliser ' '.

8voto

Brad Christie Points 58505

Rappelez-vous que .text() enlève le balisage, donc je ne pense pas que vous allez trouver   dans un résultat sans marquage.

Réalisé dans une réponse....

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

Affiche une alerte, car l'équivalent ASCII de la balise est renvoyé à la place.

2 votes

En utilisant jQuery, nous pouvons voir que $("<div>&nbsp;</div>").text().charCodeAt() donne 160 (unicode pour nbsp)

2voto

JAAulde Points 10235

Cette entité est convertie en caractères qu'elle représente lorsque le navigateur rend la page. JS (jQuery) lit la page rendue, il ne rencontrera donc pas une telle séquence de texte. La seule façon dont il pourrait rencontrer une telle chose est si vous doublez l'encodage des entités.

0voto

Jacob Mattison Points 32137

Les documents de jQuery pour text() dit

En raison des variations dans les analyseurs HTML dans les différents navigateurs, le texte renvoyé peut varier en termes de nouvelles lignes et de autres espaces blancs.

J'utiliserais $td.html() à la place.

0 votes

Cela ajoutera des balises html au balisage de votre page. Par exemple, la chaîne "<text>" sera un élément html.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X