说我有这样的元素......
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mo class="symbol">α</mo>
</math>
有没有办法使用JavaScript / jQuery获取alpha α
,α
的unicode / hex值?有点像...
$('.symbol').text().unicode(); // I know unicode() doesn't exist
$('.symbol').text().hex(); // I know hex() doesn't exist
我需要α
而不是α
,似乎我随时将α
插入DOM并尝试立即检索它,它会被渲染,我无法获取{ {1}}回来;我得到α。
答案 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
返回网址解码字符串
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);
}