Come viene rappresentato uno spazio unificatore in una stringa JavaScript?


111

Questo apparentemente non funziona:

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

C'è qualcosa in uno spazio unificatore o nella e commerciale che a JavaScript non piace?


1
Non funziona come? Cosa stai facendo allora con X?
Erik Forbes

Oh, se dico X = $ td.html () funziona.
Phillip Senn

8
Ricorda che .text()rimuove il markup, quindi non credo che troverai  in un risultato non markup.
Brad Christie

1
Potrei sbagliarmi qui, ma text () non espande le entità html?
Dennis Kreminsky

@ Brad - avresti dovuto renderlo una risposta. = P
Erik Forbes

Risposte:


253

 è un'entità HTML. Quando si fa.text() , tutte le entità HTML vengono decodificate con i valori dei loro caratteri.

Invece di confrontare utilizzando l'entità, confronta utilizzando il carattere grezzo effettivo:

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

Oppure puoi anche creare il carattere dal codice del carattere manualmente nella sua forma con escape Javascript:

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

Maggiori informazioni su String.fromCharCodesono disponibili qui:

fromCharCode - MDC Doc Center

Ulteriori informazioni sui codici dei caratteri per i diversi set di caratteri sono disponibili qui:

Windows-1252 Charset
UTF-8 Charset


@cobbal: Verissimo ... Sarebbe il modo più semplice in realtà.
Andrew Moore

3
Wow. Questa risposta è così complicata, deve essere corretta! (Io e JavaScript siamo come l'olio e l'acqua). Ma forse se sono scosso violentemente ci mischeremo insieme.
Phillip Senn

Gli spazi ordinari si stanno rompendo, quindi è "\ x20", ma è meglio usare "".
Patrick Szalapski

7

Ricorda che .text()rimuove il markup, quindi non credo che troverai  in un risultato non markup.

Fatto in una risposta ...

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

Mostra un avviso, poiché al suo posto viene restituito l'equivalente ASCII del markup.


2
Usando jQuery possiamo vedere che $("<div>&nbsp;</div>").text().charCodeAt()160(unicode per nbsp)
cobbal

2

Quell'entità viene convertita nel carattere che rappresenta quando il browser esegue il rendering della pagina. JS (jQuery) legge la pagina sottoposta a rendering, quindi non incontrerà tale sequenza di testo. L'unico modo in cui potrebbe incontrare una cosa del genere è se stai codificando due entità.


0

La documentazione di jQuery per text()dice

A causa delle variazioni nei parser HTML nei diversi browser, il testo restituito può variare in nuove righe e altri spazi bianchi.

Io $td.html()invece userei.


Questo aggiungerà tag html al markup della tua pagina. Ad esempio, la stringa "<testo>" sarà un elemento html.
Barh
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.