【发布时间】:2015-12-04 15:26:58
【问题描述】:
我有一个内容可编辑的 div,我希望能够让用户插入链接、图片或 YouTube 视频等内容。目前这就是我所拥有的:
function addLink() {
var link = $('#url').val();
$('#editor').focus();
document.execCommand('createLink', false, link);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Text Editor -->
<div id="editor" contenteditable="true"></div>
<!-- Add Link -->
<input type="text" id="url">
<button onclick="addLink()">Submit</button>
如您所见,用户必须在单独的文本框中输入链接地址。结果,当链接被添加到编辑器时,它并没有被添加到指针/插入符号所在的位置。
我的问题是如何获取和设置指针/插入符号的位置。我见过其他问题,例如this for setting the pointer,但我希望有一个所有现代浏览器都支持的解决方案,包括 Chrome、Safari、Firefox 和 IE9+。
有什么想法吗?谢谢。
编辑:
我在下面找到了获取位置的代码,但是它只根据它所在的行获取位置。例如,如果我有这个(| 是光标):
This is some text
And som|e more text
然后我将返回值 7,而不是 24。
function getPosition() {
if (window.getSelection) {
sel = window.getSelection();
if (sel.getRangeAt) {
return sel.getRangeAt(0).startOffset;
}
}
return null;
}
【问题讨论】:
-
您链接到的解决方案确实有一个适用于所有浏览器的解决方案,只需阅读超出接受的浏览器即可。至于获取光标位置试试这个:stackoverflow.com/questions/4767848/…
-
@SunKnight0 我从您提供的解决方案中尝试了以下代码,但是它一如既往地返回 0.
var editor = document.getElementById('#editor');console.log( getCaretCharacterOffsetWithin(editor) );我使用了这个答案中的函数stackoverflow.com/questions/4811822/… -
使用
getElementById('editor')。您正在将原生 JavaScript 与 JQuery 混合使用。 -
@SunKnight0 抱歉,评论有误。即使使用
getElementById('editor'),插入符号的位置也是0。
标签: javascript jquery html