Esto aparentemente no está funcionando:
X = $td.text(); if (X == ' ') { X = ''; }¿Hay algo sobre un espacio que no se rompe o el ampersand que a JavaScript no le gusta?
es una entidad HTML. Al hacer .text() , todas las entidades HTML se decodifican a sus valores de carácter.
En lugar de comparar usando la entidad, compare usando el carácter sin procesar 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 de 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.fromCharCode está disponible aquí:
Más información sobre códigos de caracteres para diferentes juegos de caracteres está disponible aquí:
Recuerde que .text() elimina el marcado, por lo que no creo que vaya a encontrar en un resultado sin marcado.
Hecho en una respuesta....
var p = $('<p>').html(' '); 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.
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á esa secuencia de texto. La única forma en que podría encontrar algo así es si tiene entidades de doble codificación.