javascript – 在contenteditable中自动链接URL

当用户完成输入contenteditable div中的URL时,我想自动链接它,就像Medium所做的那样:).

我想知道如何使用选择/范围来实现这一目标(我不需要支持IE,只需支持现代版本的Chrome,Firefox和Safari),如果可能的话没有任何笨拙(但如果这是我将使用的唯一解决方案)它).

我可以在用户按下空格键后检测URL是否在插入符号之前,但我不能在我的范围内使用execcommand(‘createLink’…).

这是一个非常简化的示例(jsfiddle),我尝试在用户按空格键后以粗体格式化插入符号前面的4个字符:

$("#editor").on("keypress", function(event) {
  var pressedChar = String.fromCharCode(event.which);
  if(/\s/.test(pressedChar)) {
    var selection   = window.getSelection();
    var range       = selection.getRangeAt(0);
    range.setStart(range.startContainer, range.startOffset - 4);

    selection.removeAllRanges();
    selection.addRange(range);
    document.execCommand('bold', false);
  }
}

当我键入几个字符然后输入一个空格时,前面的4个字符没有按照我想要的粗体格式化,它们只是从div中消失,只有我之后键入的新字符才会加粗.

解决方法:

终于找到了一个解决方法,而不使用execCommand:

>删除范围内容:range.deleteContents()
>创建我想要插入的链接节点
>在以下范围内插入节点:range.insertNode(createdLinkNode)
>将插入符号放在插入的节点之后:

range.setStartAfter(createdLinkNode);
range.setEndAfter(createdLinkNode);
selection.removeAllRanges();
selection.addRange(range);
上一篇:table选中某条数据删除功能


下一篇:Android中的文本选择侦听器(API级别7)