Как получить представление unicode/hex символа из HTML с помощью JavaScript/jQuery?
Скажем, у меня есть такой элемент...
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mo class="symbol">α</mo>
</math>
Есть ли способ получить значение unicode/hex альфа α
, α
, используя JavaScript/jQuery? Что-то вроде...
$('.symbol').text().unicode(); // I know unicode() doesn't exist
$('.symbol').text().hex(); // I know hex() doesn't exist
Мне нужно α
вместо α
, и кажется, что всякий раз, когда я вставляю α
в DOM и пытаюсь получить его сразу, он получает визуализацию, и я не могу получить α
назад; Я просто получаю α.
Ответы
Ответ 1
Используя в основном простой 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/
Ответ 2
charCodeAt
вы получите десятичное значение строки:
"α".charCodeAt(0); //returns 945
0x03b1 === 945; //returns true
toString
затем получит шестнадцатеричную строку
(945).toString(16); // returns "3b1"
(Подтверждено работать в IE9 и Chrome)
Ответ 3
Если вы попытаетесь преобразовать символ Unicode из BMP (базовый многоязычный самолет) выше, вы готовы к неприятному удивлению. Символы из 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));
};
вы также можете использовать его как
"&#x"+("🔒".charCodeUTF32()).toString(16)+";"
чтобы получить html шестнадцатеричные коды.
Надеюсь, это сэкономит вам некоторое время.
Ответ 4
например, если вам нужно преобразовать этот шестнадцатеричный код в unicode
e68891e4bda0e4bb96
- выберите два символа по времени,
- если код dec ascii превышает 127, добавьте% before
-
return url decode string
Функция hex2a (hex) { var str = ''; для (var я = 0; я < hex.length; я + = 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);
}