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

Hri*_*sto 17 html javascript unicode jquery hex

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

<math xmlns="http://www.w3.org/1998/Math/MathML">
  <mo class="symbol">?</mo>
</math>
Run Code Online (Sandbox Code Playgroud)

有没有办法让阿尔法的Unicode /十六进制值?,&#x03B1使用的JavaScript/jQuery的?就像是...

$('.symbol').text().unicode(); // I know unicode() doesn't exist
$('.symbol').text().hex(); // I know hex() doesn't exist
Run Code Online (Sandbox Code Playgroud)

我需要&#x03B1代替,?而且似乎任何时候我插入&#x03B1DOM并尝试立即检索它,它会被渲染,我无法&#x03B1回来; 我得到了α.

aro*_*oth 23

使用大多数纯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 + ";";
}
Run Code Online (Sandbox Code Playgroud)

这是一个例子:http: //jsfiddle.net/btWur/


Jim*_*lle 14

charCodeAt 会得到字符串的十进制值:

"?".charCodeAt(0); //returns 945
0x03b1 === 945; //returns true
Run Code Online (Sandbox Code Playgroud)

toString 然后将获得十六进制字符串

(945).toString(16); // returns "3b1"
Run Code Online (Sandbox Code Playgroud)

(确认在IE9和Chrome中工作)


Mat*_*ius 10

如果您试图通过上述方式将BMP(基本多语言平面)中的Unicode字符转换出来- 那么您将面临令人讨厌的惊喜.BMP中的字符编码为多个UTF16值,例如:

"".length = 2(一部分用于卸扣一部分用于锁定底座:))

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

要获取这些值的char代码,您可能需要使用以下字符串扩展功能

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

你也可以像这样使用它

"&#x"+("".charCodeUTF32()).toString(16)+";"
Run Code Online (Sandbox Code Playgroud)

获取html十六进制代码.

希望这能为您节省一些时间.