我想在我的 HTML 链接文本中显示“打开锁”字符。
如果我直接这样做,它会正确显示<a id="myId">🔒</a>
,但我发现无法使用 jQuery.text()
函数动态更改它,例如:
$("#myID").text(openLockText);
我应该在 openLockText 中放什么?
我想在我的 HTML 链接文本中显示“打开锁”字符。
如果我直接这样做,它会正确显示<a id="myId">🔒</a>
,但我发现无法使用 jQuery.text()
函数动态更改它,例如:
$("#myID").text(openLockText);
我应该在 openLockText 中放什么?
Javascript 内部仅支持 UTF-16。
因为这是一个扩展的 32 位 UTF 字符(不在“基本多语言平面”中),所以您需要插入“UTF-16 代理对”,它在您链接到的同一页面上很有帮助:
0xD83D 0xDD13
IE
$('#myId').text('\ud83d\udd13');
更多细节可以在RFC 4627中找到,严格来说是 JSON 的格式。
已编辑——如果它是一个可以用单个 UTF-16 字符表示的 Unicode 代码点,那么您可以在这种情况下使用 JavaScript 转义序列:
$('#foo').text('\uXXXX');
但是,因为您的角色需要更多位,所以这是行不通的。可能可以构建允许字符表示为 UTF-16 的字节序列,但这会很痛苦。我会去的.html()
。
请注意,并非所有字体都为这样的“异国情调”代码点提供字形,并且根据我的经验,那些确实提供了令人难以置信的丑陋的字形。
您可以将字符直接放在那里,作为带引号的字符串,例如
$("#myID").text('');
前提是文件是 UTF-8 编码的并且您正确声明了字符编码。(理论上,您可以选择使用 UTF-16 甚至 UTF-32,但不应期望浏览器支持它们。)
尽管根据 ECMAScript 标准,直接在源文档中支持非 BMP 字符是可选的,但现代浏览器允许您使用它们。自然,您需要一个可以处理 UTF-8 的编辑器,并且您需要一些输入法;例如,请参阅我的完整 Unicode 输入实用程序。
该问题包含一些未被注意到的错误:由于id
属性值区分大小写,因此myId
需要将拼写固定为myID
. 并且 OPEN LOCK 字符是 U+1F513,而不是 U+1F512,所以引用🔒
会给出错误的字符。
此外,很少有字体包含OPEN LOCK,浏览器,尤其是IE,即使系统中的某些字体包含字形,也可能很难找到字形,所以你应该给浏览器帮助并声明一个已知包含该字符的字体列表,按优先顺序。例子:
<style>
#myID { font-family: Symbola, Quivira, Segoe UI Symbol; }
</style>
<a id="myID">stuff</a>
<script>
$("#myID").text('');
</script>
非 BMP 字符在内部表示为代理对,并且可以使用代理对的组件的符号来编写\u
,但这非常不直观
以下脚本应将 UTF32 十六进制值转换为 UTF16 对
function toUTF16Pair(hex) {
hex = hex.replace(/[&#x;]/g,'');
var x = parseInt(hex, 16);
if (x >= 0x10000 && x <= 0x10FFFF) {
var first = Math.floor((x - 0x10000) / 0x400) + 0xD800;
var second = ((x - 0x10000) % 0x400) + 0xDC00;
return {
first: first.toString(16).toUpperCase(),
second: second.toString(16).toUpperCase(),
combined: '\\u'+first.toString(16).toUpperCase() + '\\u'+second.toString(16).toUpperCase()
};
} else {
return {}
}
}
<input type='text' id='in' />
<input type='button' value='Click' onclick="document.getElementById('result').innerHTML = toUTF16Pair(document.getElementById('in').value).combined" />
<p id='result'></p>