javascript - 如何在 contenteditable div 中聚焦于 <p>

标签 javascript html contenteditable caret

我正在使用 contenteditable div 来制作丰富的编辑器。 我现在的问题是我无法将插入符号定位在 <p> 上就在我嵌入 Instagram 框架之后。 我尝试的是创建新的 <p>嵌入 Instagram 框架后将注意力集中在它上。但它不起作用。

有人知道这个问题的解决办法吗?

I make JSFiddle as example (我在 CSS block 中放入了嵌入代码之一)

最佳答案

尽管 contenteditable spec 声明应该可以将光标放置在空 p 标记内,如下所示:

<div>aaa<p>|</p>bbb</div>

Webkit (Safari) 和 Blink (Chrome) 目前不支持。更多信息here

幸运的是,有一个相对简单的解决方法。我们只需要获取 p 标签内的一些内容,以便将光标放置在此处。一种选择可能是附加包含 Zero Width Space 的文本节点。这种方法有时对于涉及内联标记的情况很有用。

就您而言,最有效的解决方案是简单地在段落中附加换行符。 Contenteditable 实现通常将 block 标签内的换行符视为“临时保持节点”,并且默认处理在主要浏览器中是相同的。初始结果应如下所示:

<div>aaa<p>|<br></p>bbb</div>

一旦您开始输入,BR就会被替换(浏览器会自动执行此操作):

<div>aaa<p>inner text|</p>bbb</div>

即使您删除了内部文本,浏览器也应该自动重新插入换行符,因此您始终能够将光标放回内部。

我已经用一个示例 here fork 并更新了您的 jsfiddle 。

关于javascript - 如何在 contenteditable div 中聚焦于 <p>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39916402/

相关文章:

javascript - 将 anchor append 到无序列表中的每个列表项 - Javascript

html - float 上的困惑。为什么设置第二个元素的宽度会影响 float ?

javascript - 添加了 contenteditable ="true"的 DIV 不关注点击

html - 在 Opera 中,输入用黑色包围

jquery - 替换链接中以外的文本

javascript - 可编辑 DIV 在光标处添加一些文本

javascript - 在 html div 中显示所有 DOM 节点

javascript - 更改 CircularProgress 的颜色和位置?

javascript - JQuery 前置函数

php - mysql 和 php 命令有时无法发布。难道是我 body 的原因?