2011-07-10 4 views
13

JavaScript/jQueryを使用して、HTMLからシンボルのUnicode/16進表現を取得するにはどうすればよいですか?

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

ではJavaScript/jQueryのを使用して、アルファα&#x03B1のユニコード/進値を取得する方法はあります...私はこのような要素を持っていると言いますか?以下のような何か...

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

私は、それがレンダリングされると、私は&#x03B1を取り戻すことができないDOMに&#x03B1を挿入して、すぐにそれを取得しようとする私の代わりにα&#x03B1必要、それはいつのように思えます。私はただαを得る。主に平野JavaScriptを使用して

答えて

19

、あなたが行うことができるはず:

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 + ";"; 
} 

ここでは例です:http://jsfiddle.net/btWur/

+0

@aroth ...これは素晴らしいですね!私は今、テストしている – Hristo

10

charCodeAtはあなたの文字列の小数点値を取得します:

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

toStringは、16進文字列を取得します

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

あなたがUnicodeにこの進コードに変換する必要がある場合には、たとえば

+0

@ジェームス...非常にクール! – Hristo

0

(IE9とChromeで動作確認)

e68891e4bda0e4bb96

  1. は、時間によって2つの文字の時間を選択
  2. dec ASCIIコードが127を超えている場合は、前に%を追加します。
  3. 戻りURLデコード文字列

    関数hex2a(hex){ var str = ''; (; I < hex.length; VAR I = 0 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

あなたは、上記の方法でBMP (basic multilingual plane)のうち、Unicode文字を変換しようとする場合 - あなたは厄介な驚きのためにアップしています。

"".length = 2(一部シャックル一部のロックベース用:))

ので"".charCodeAt(0)はあなたの唯一の「半分」である55357を与える:BMPのうち文字が例えばUTF16値倍数として符号化されます他の半分は"".charCodeAt(1)56594となります。あなたが使用する使用したいかもしれないそれらの値のための文字コードを取得するには

文字列拡張機能次

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

あなたはまた、HTMLの16進コードを取得するには、この

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

のようにそれを使用することができます。

希望すれば、時間を節約できます。

+1

+1この地雷から私たちを救ってくれてありがとう!キャラクターの長さをチェックすることが私の鍵でした。 – L0j1k

関連する問題