【问题标题】:How to focus on <p> in contenteditable div如何在 contenteditable div 中关注 <p>
【发布时间】:2016-10-07 11:42:34
【问题描述】:

我正在使用 contenteditable div 来制作富编辑器。 我现在的问题是,在我嵌入 Instagram 框架后,我无法将插入符号定位在 &lt;p&gt; 上。 我尝试的是创建新的&lt;p&gt; 并在嵌入 Instagram 框架后专注于它。但它不起作用。

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

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

【问题讨论】:

    标签: javascript html contenteditable caret


    【解决方案1】:

    虽然 contenteditable spec 声明应该可以将光标放在一个空的 p 标签内,如下所示:

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

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

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

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

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

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

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

    即使您删除了内部文本,浏览器也应该自动重新插入换行符,这样您就可以始终将光标移回内部。

    我已经使用示例 here 分叉并更新了您的 jsfiddle。

    【讨论】:

    • 非常感谢。这对我有用!!我把它推迟到以后。
    猜你喜欢
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 2020-12-11
    相关资源
    最近更新 更多