Como um espaço sem quebra é representado em uma string JavaScript?

111

Aparentemente, isso não está funcionando:

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

Existe algo sobre um espaço sem quebra ou o e comercial que o JavaScript não gosta?

Phillip Senn
fonte
1
Não está funcionando como? O que você está fazendo então com o X?
Erik Forbes,
Oh, se eu disser X = $ td.html (), funciona.
Phillip Senn
8
Lembre-se de que .text()remove a marcação, portanto, não acredito que você vá encontrar  um resultado sem marcação.
Brad Christie,
1
Posso estar errado aqui, mas text () não expande entidades html?
Dennis Kreminsky,
@Brad - você deveria ter respondido isso. = P
Erik Forbes,

Respostas:

253

 é uma entidade HTML. Ao fazer isso .text(), todas as entidades HTML são decodificadas para seus valores de caractere.

Em vez de comparar usando a entidade, compare usando o caractere bruto real:

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

Ou você também pode criar o caractere a partir do código do caractere manualmente em sua forma de escape Javascript:

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

Mais informações sobre String.fromCharCodeestão disponíveis aqui:

fromCharCode - MDC Doc Center

Mais informações sobre códigos de caracteres para diferentes conjuntos de caracteres estão disponíveis aqui:

Windows-1252 Charset
UTF-8 Charset

Andrew Moore
fonte
@cobbal: É verdade ... Essa seria a maneira mais simples.
Andrew Moore,
3
Uau. Essa resposta é tão complicada que deve estar correta! (Eu e o JavaScript são como óleo e água). Mas talvez se eu for sacudido violentamente nos misturemos.
Phillip Senn,
Espaços comuns estão quebrando, então é '\ x20', mas é melhor usar ''.
Patrick Szalapski
7

Lembre-se de que .text()remove a marcação, portanto, não acredito que você vá encontrar  um resultado sem marcação.

Feito em resposta ...

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

Mostra um alerta, já que o equivalente ASCII da marcação é retornado.

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

Essa entidade é convertida no char que representa quando o navegador renderiza a página. JS (jQuery) lê a página renderizada, portanto, não encontrará essa sequência de texto. A única maneira de encontrar tal coisa é se você estiver codificando entidades duplas.

JAAulde
fonte
0

A documentação do jQuery para text()diz

Devido às variações nos analisadores HTML em navegadores diferentes, o texto retornado pode variar em novas linhas e outros espaços em branco.

Eu usaria em $td.html()vez disso.

Jacob Mattison
fonte
Isso adicionará tags html à marcação de sua página. Por exemplo, a string '<texto>' será um elemento html.
Barh