spazio irriducibile

Questo a quanto pare non funziona:

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

C’è qualcosa in uno spazio non-breaking o nella e commerciale che non piace a JavaScript?

  è un’ quadro HTML. Quando si fa .text() , tutte le entity framework HTML vengono decodificate ai loro valori di carattere.

Invece di confrontare usando l’entity framework, confronta usando il vero carattere grezzo:

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

Oppure puoi anche creare manualmente il carattere dal codice carattere nel suo modulo di escape JavaScript:

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

Ulteriori informazioni su String.fromCharCode sono disponibili qui:

fromCharCode – MDC Doc Center

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

Windows-1252 Charset
Set di caratteri UTF-8

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

Fatto in una risposta ….

 var p = $('

').html(' '); if (p.text() == String.fromCharCode(160) && p.text() == '\xA0') alert('Character 160');

Mostra un avviso, come invece viene restituito l’equivalente ASCII del markup.

Tale entity framework viene convertita nel carattere che rappresenta quando il browser esegue il rendering della pagina. JS (jQuery) legge la pagina renderizzata, quindi non incontrerà una tale sequenza di testo. L’unico modo in cui potrebbe incontrare una cosa del genere è se sei quadro a doppia codifica.

I documenti jQuery per text() dice

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

Vorrei usare $td.html() invece.