将文本和html unicode字符添加到textarea元素中
Add text and html unicode characters to a textarea element
我有一个文本区域,当用户键入时,我用它来添加文本和表情符号。为了让表情符号发挥作用,我有一些图像,用户可以点击或使用用户设备键盘上的默认值。目前我可以在方框里打字或使用emjois,但我不能两者都做。
要获得字符的unicode,我必须将unicode字符串添加到文本区域,如:
var t = $('#msgWriteArea').html() + '&#x'+ code;
$('#msgWriteArea').html(t);
我遇到的问题是,当我在插入这些字符之前或之后在框中键入时,文本可以通过.val()
或value属性访问,Unicode字符可以通过.html()
或innerHtml
属性访问。
有没有一种方法可以将文本作为HTML而不是值输入到文本区域,或者有没有一个方法可以将unicode字符和文本组合在同一文本区域中。
问题的JS Fiddle
设法解决了这个问题,有很多事情需要更改,最重要的是将textarea更改为这让事情变得容易多了
这是一把小提琴,
固定版本
这些问题的答案帮助了
使用jQuery 将文本插入文本区域
获取内容中的插入符号位置可编辑div
如何在contenteditable元素(div)中设置插入符号(光标)的位置?
如何在contenteditable元素中用html替换所选文本?
这不是最整洁的编码,可能可以做得更好,如果可以的话,可以随意编辑小提琴,让它变得更好,这可能会帮助其他被困在同一个地方的人
最近我遇到了同样的问题,我想继续使用textarea和纯javascript。解决方案是在临时div中预呈现一个表情符号,并将textarea值与呈现的HTML 一起替换
let msg = document.getElementById('textareaID').value;
let g = document.createElement('div');
g.innerHTML = '😉';
let z = g.innerHTML;
document.getElementById('textareaID').value = msg + '' + z;
delete(g);
虽然这个问题有点老,但我想添加一个替代解决方案,而不需要更改原始html。
最主要的问题是,所提出的解决方案涉及将文本区域更改为可编辑内容的容器。虽然乍一看效果很好,但这种方法的缺点是,您需要一个解决占位符属性、可访问性问题(因为这不是一个"正确"的输入)和选项卡问题的方法。
只要稍微重写一下,你仍然可以使用文本区域,结合val([…])函数和作为代理对编写的表情符号:
$('textarea').val($('textarea').val() + ' ' + emoticon);
https://jsfiddle.net/ay03mh6z/
在javascript中处理unicode时,请使用'u0000
而不是�
。
您可能还想在插入符号处插入字符。。。我最近创建了一个用户脚本,为GitHub评论做同样的事情(你可能想看看代码)-GitHub自定义表情符号。它使用At.js添加一个自动完成下拉列表,负责在插入符号处插入文本。
更新:使用内容可编辑的div是更好的方法,因为它允许您插入图像(演示)。现在的问题是代码正在使用.html()
来添加内容。相反,它需要更改为使用类似rangy的东西在插入符号处插入HTML或替换用户选择的文本。一旦插入图像并添加更多文本(text <img> text
),您就会在我在本次更新中链接的演示中看到问题。
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 将文本和html unicode字符添加到textarea元素中
- 如何可靠地检查textarea元素在jQuery中是否有任何内部文本
- 使用textarea-tinymce插件管理动态添加和删除元素
- 我可以设置TEXTAREA元素的高度,但让用户稍后调整它的大小吗
- 如何使用javascript替换textarea元素
- 如何使textarea元素看起来像普通文本
- jQuery帮助在Textarea中添加和删除元素
- 是否可以用AJAX调用中的数据更新textarea元素?
- 从多个动态创建的HTML textarea元素发布
- 将元素HTML附加到新附加的textarea中
- 如何获得一个textarea元素在jquery中,当名称是在一个变量
- 如何改进textarea元素
- 新建<李>单击按钮时具有textarea的元素
- 以编程方式选择与textarea元素中的字符串匹配的文本(就像用鼠标一样)
- 不能在元素textarea上使用find,它是td的子元素
- angular js-ng在一个textarea元素中重复
- Textarea自动完成angularjs只有10个元素