【发布时间】:2016-09-06 11:17:47
【问题描述】:
我正在使用twemoji 库在输入字段中显示表情符号(可编辑的 div):
<div contenteditable="true" id="input_div"></div>
用户可以使用外部按钮添加表情符号,这样我就可以非常简单地将它添加到 div 中(不用关心插入符号的位置):
div.innerHTML += twemoji.parse(emoji);
接下来我需要使用表情符号从 div 获取用户输入,有没有一些简单的方法可以转换回 unicode 字符?
我当前的解决方案here(我只是解析<img> 以获取alt 属性)但我认为它看起来有点棘手,我不能使用div.innerText 属性(从div 获取纯文本非常方便)因为我会失去表情符号。我还使用div.getInnerText 来防止从剪贴板插入html或图像:
div.addEventListener("insert", () => {setTimeout(div.innerText = div.innerText,0)})
【问题讨论】:
-
你会得到类似的东西作为可编辑元素的innerHTML,
<img class="emoji" draggable="false" alt="????" src="http://twemoji.maxcdn.com/36x36/1f600.png">- 所以你可以再次将它从img src中解析出来(看到1F600是你的代码点从中创建表情符号,因此这似乎直接反映在图像文件名中。) -
@CBroe 请参考我在 plunker 上的链接,这正是我现在所做的(我解析 alt 属性,但没关系),对我来说它看起来不方便,因为我使用 div.innerText 属性从没有任何 html 的 div 中获取干净的文本
-
“我解析了 alt 属性,但没关系” - 如果 alt 属性不包含您想要的内容,这很重要。
alt="????"– 看到那个替换字符了吗? (这是从简单地将 innerHTML 记录到控制台中复制的。)这很可能意味着您使用的库写入属性的内容不是有效的 unicode 代码点。 (单击“获取文本”按钮后,我会在您的文本区域下看到完全相同的字符 - 因此您的代码可以正常工作,它只适用于已经损坏的输入数据。) -
@CBroe alt 属性不包含 unicode 代码点,但它包含应该对应于该代码点的代理符号,据我所知,在这种情况下,使用代码点和 \u 字符组之间没有区别,不是吗?可以肯定的是,在您的评论中,我看到对应
1F607代码点的表情符号。我用标准字体在 OSX 和 Windows7/10 上检查了它 -
@CBroe 看来我没有正确理解你,你的意思是“它只适用于已经损坏的输入数据。”?
标签: javascript html css emoji