¿Cómo se representa un espacio que no se rompe en una cadena de JavaScript?

111

Esto aparentemente no está funcionando:

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

¿Hay algo sobre un espacio que no se rompe o el signo comercial que no le gusta a JavaScript?

Phillip Senn
fuente
1
¿No funciona cómo? ¿Qué estás haciendo entonces con X?
Erik Forbes
Oh, si digo X = $ td.html () funciona.
Phillip Senn
8
Recuerde que .text()elimina el marcado, por lo tanto, no creo que lo encuentre  en un resultado sin marcado.
Brad Christie
1
Puede que me equivoque aquí, pero ¿el texto () no expande las entidades html?
Dennis Kreminsky
@Brad: deberías haberlo hecho una respuesta. = P
Erik Forbes

Respuestas:

253

 es una entidad HTML. Al hacerlo .text(), todas las entidades HTML se decodifican a sus valores de caracteres.

En lugar de comparar utilizando la entidad, compare utilizando el carácter sin formato real:

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

O también puede crear el carácter a partir del código del carácter manualmente en su forma de escape de Javascript:

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

Más información sobre String.fromCharCodeestá disponible aquí:

fromCharCode - MDC Doc Center

Más información sobre códigos de caracteres para diferentes conjuntos de caracteres está disponible aquí:

Juego de caracteres Windows-1252 Juego de caracteres
UTF-8

Andrew Moore
fuente
@cobbal: Muy cierto ... Esa sería la forma más sencilla en realidad.
Andrew Moore
3
Guau. ¡Esta respuesta es tan complicada que debe ser correcta! (JavaScript y yo somos como aceite y agua). Pero tal vez si me sacuden violentamente nos mezclaremos.
Phillip Senn
Los espacios ordinarios se están rompiendo, por lo que es '\ x20', pero es mejor usarlo ''.
Patrick Szalapski
7

Recuerde que .text()elimina el marcado, por lo tanto, no creo que lo encuentre  en un resultado sin marcado.

Hecho en respuesta ...

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

Muestra una alerta, ya que en su lugar se devuelve el equivalente ASCII del marcado.

Brad Christie
fuente
2
Usando jQuery podemos ver que $("<div>&nbsp;</div>").text().charCodeAt()da 160(unicode para nbsp)
cobbal
2

Esa entidad se convierte en el carácter que representa cuando el navegador muestra la página. JS (jQuery) lee la página renderizada, por lo que no encontrará tal secuencia de texto. La única forma en que podría encontrar algo así es si tiene entidades de codificación doble.

JAAulde
fuente
0

Los documentos de jQuery para text()dice

Debido a variaciones en los analizadores HTML en diferentes navegadores, el texto devuelto puede variar en líneas nuevas y otros espacios en blanco.

Yo usaría $td.html()en su lugar.

Jacob Mattison
fuente
Esto agregará etiquetas html al marcado de su página. Por ejemplo, la cadena '<texto>' será un elemento html.
Barh