2011-07-10 43 views
13

Decir que tengo un elemento como este ...¿Cómo obtengo la representación unicode/hexágono de un símbolo fuera del HTML usando JavaScript/jQuery?

<math xmlns="http://www.w3.org/1998/Math/MathML"> 
    <mo class="symbol">α</mo> 
</math> 

¿Hay una manera de obtener el valor/hexadecimal Unicode de la alfa α, &#x03B1, usando JavaScript/jQuery? Algo así como ...

$('.symbol').text().unicode(); // I know unicode() doesn't exist 
$('.symbol').text().hex(); // I know hex() doesn't exist 

necesito &#x03B1 en lugar de α y parece que en cualquier momento puedo insertar &#x03B1 en el DOM y tratar de recuperarlo de inmediato, se rindió y no puedo conseguir &#x03B1 espalda; Acabo de obtener α.

Respuesta

19

Usando su mayoría llano JavaScript, debe ser capaz de hacer:

function entityForSymbolInContainer(selector) { 
    var code = $(selector).text().charCodeAt(0); 
    var codeHex = code.toString(16).toUpperCase(); 
    while (codeHex.length < 4) { 
     codeHex = "0" + codeHex; 
    } 

    return "&#x" + codeHex + ";"; 
} 

He aquí un ejemplo: http://jsfiddle.net/btWur/

+0

@aroth ... ¡esto se ve increíble! Estoy probando ahora – Hristo

10

charCodeAt le dará el valor decimal de la cadena:

"α".charCodeAt(0); //returns 945 
0x03b1 === 945; //returns true 

toString obtendrá la cadena hexadecimal

(945).toString(16); // returns "3b1" 

(confirmado para trabajar en IE9 y Chrome)

+0

@James ... ¡genial! – Hristo

0

por ejemplo, en caso de que necesite para convertir el código hexadecimal a unicode

e68891e4bda0e4bb96

  1. recoger dos veces el carácter por el tiempo,
  2. si el código de ascii es superior a 127, agregue un% antes de
  3. return url cadena de decodificación

    función hex2a (hexadecimal) { var str = ''; for (var i = 0; i < hex.length; i + = 2) {

    var dec = parseInt(hex.substr(i, 2), 16); 
        character = String.fromCharCode(dec); 
    
    
        if (dec > 127) 
         character = "%"+hex.substr(i,2); 
    
        str += character; 
    
    } 
    
    return decodeURI(str); 
    

    }

8

Si desea tratar de convertir caracteres Unicode de BMP (basic multilingual plane) en formas más arriba - estás preparado para una desagradable sorpresa. Personajes de BMP se codifican como múltiple UTF16 valores por ejemplo:

"".length = 2 (una parte para grillete una parte de base de bloqueo :))

así "".charCodeAt(0) le dará 55357 que es sólo 'medio' de número mientras que "".charCodeAt(1) le dará 56594 que es la otra mitad.

para obtener los códigos de char de esos valores es posible que quieras utilizar este medicamento siguiente función de ampliación del ramal

String.prototype.charCodeUTF32 = function(){ 
    return ((((this.charCodeAt(0)-0xD800)*0x400) + (this.charCodeAt(1)-0xDC00) + 0x10000)); 
}; 

también se puede utilizar de esta manera

"&#x"+("".charCodeUTF32()).toString(16)+";" 

para obtener los códigos hexadecimal HTML.

Espero que esto te ahorre algo de tiempo.

+1

+1 ¡Gracias por salvarnos de esta mina! Verificar la longitud del personaje fue la clave para mí. – L0j1k

Cuestiones relacionadas