我有一些IMG表情符号,可以作为它们的字符串形式插入到文本框中。下面的脚本必须获取光标位置并将其表示插入到正确的位置,但有时会误触并将选择范围重置为0。
您可以通过在示例中单击笑脸和文本区域内部来查看它的效果。我已经在在文本框内容末尾设置光标后将其重置为0。
window.onload = function() {
var doc = window.document;
var smiles = doc.getElementById('chat-smiles-panel').getElementsByTagName('IMG');
var el = doc.getElementById('chat-textarea');
for (var i = 0; i < smiles.length; i++) {
smiles[i].onclick = function(e) {
var elem, evt = e?e:event;
elem = (evt.target)?evt.target:evt.srcElement;
var newText = elem.getAttribute('data-smile');
console.log('before', el.selectionStart, el.selectionEnd);
var start = el.selectionStart;
var end = el.selectionEnd;
var text = el.value;
var before = text.substring(0, start);
var after = text.substring(end, text.length);
el.value = (before + newText + after);
start = end = start + newText.length;
el.setSelectionRange(start, end);
console.log('after', el.selectionStart, el.selectionEnd);
}
}
};
<div>
<div id="chat-smiles-panel">
<img width="20" src="https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/160/apple/155/slightly-smiling-face_1f642.png" alt="smiley" data-smile=":smiley:" />
<img width="20" src="https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/160/apple/155/rolling-on-the-floor-laughing_1f923.png" alt="lol" data-smile=":lol:" />
<img width="20" src="https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/160/apple/155/smiling-face-with-halo_1f607.png" alt="angel" data-smile=":angel:" />
</div>
<textarea id="chat-textarea"></textarea>
</div>
在控制台日志中会看到插入表情符号之前和之后的插入点位置。