如何使用JavaScript / jQuery从HTML中获取符号的unicode / hex表示?

时间:2011-07-10 07:06:32

标签: javascript jquery html unicode hex

说我有这样的元素......

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

有没有办法使用JavaScript / jQuery获取alpha α&#x03B1的unicode / hex值?有点像...

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

我需要&#x03B1而不是α,似乎我随时将&#x03B1插入DOM并尝试立即检索它,它会被渲染,我无法获取{ {1}}回来;我得到α。

4 个答案:

答案 0 :(得分:22)

使用大多数纯JavaScript,您应该能够:

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/

答案 1 :(得分:13)

charCodeAt将获得字符串的十进制值:

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

toString将获得十六进制字符串

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

(确认在IE9和Chrome中工作)

答案 2 :(得分:9)

如果您尝试以上述方式从BMP (basic multilingual plane)转换出Unicode字符,那么您将面临令人讨厌的惊喜。 BMP之外的字符编码为多个UTF16值,例如:

"".length = 2(一部分用于锁定基座的一部分))

所以"".charCodeAt(0)会给你55357,这只是数字的“一半”而"".charCodeAt(1)会给你56594,这是另一半。

要获取您可能想要使用的值的字符代码,请使用字符串扩展函数

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

您也可以像这样使用它

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

获取html十六进制代码。

希望这可以节省你一些时间。

答案 3 :(得分:0)

例如,如果您需要将此十六进制代码转换为unicode

e68891e4bda0e4bb96

  1. 逐个选择两个角色,
  2. 如果dec ascii代码超过127,则在
  3. 之前添加%
  4. 返回网址解码字符串

    function hex2a(hex){     var str =&#39;&#39 ;;     for(var i = 0; i&lt; 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);
    

    }

相关问题