gpt4 book ai didi

javascript - window.getSelection() 与 emoji-mart(选择器组件)的问题

转载 作者:行者123 更新时间:2023-11-30 06:21:08 29 4
gpt4 key购买 nike

我的代码:

addEmoji = () => {
document.getElementById('description-text').focus();

let element = $("#span").clone()[0];
let sel = window.getSelection();

if (sel.getRangeAt && sel.rangeCount) {
let range = sel.getRangeAt(0);
range.deleteContents();
range.insertNode(element);

let textNode = document.createTextNode('\u00A0');
range.setStartAfter(element);
range.insertNode(textNode);
range.setStartAfter(textNode);
range.collapse(true);

sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
}
}

render() {
return (
<div>
<form onSubmit={this.onSubmit}>
<div id="description-text" ref="description" suppressContentEditableWarning="true" contentEditable={true} />
<div>
<button type="submit">Guardar Cambios</button>
</div>
</form>
<div>
{this.state.emojiPanel ?
<div>
<button type="button" onClick={this.switchEmojiPanel}>Hide Emojis</button>
<Picker onClick={this.addEmoji} set='emojione' emojiSize={26} title="Select Emoji" color="#000" />

<span id="span">INSERT</span>
</div>
:
<div>
<button type="button" onClick={this.switchEmojiPanel}>Select Emojis</button>
</div>
}
</div>
</div>
)
}

问题是,当用户单击表情符号时尝试在 div 中插入 span 时,window.getSelection() 不会获取我在 div 中位置的值,因为我正在从另一个组件调用该函数,这是 Picker,则 span 总是插入到 div 的开头。

如果有人能帮我解决这个问题,我将不胜感激!!

最佳答案

您可以使用 css user-select 属性来实现这一点。使用 user-select: none; 属性为您在 Picker 组件内单击的元素设置样式。

这样,当用户点击 Picker 组件内的表情符号时,插入符号位置或文本选择将保留在您在 contentEditable div 中离开的位置。

请务必检查兼容性以使其在不同浏览器中正常工作: https://developer.mozilla.org/en-US/docs/Web/CSS/user-select

关于javascript - window.getSelection() 与 emoji-mart(选择器组件)的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53001701/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com