【问题标题】:Trying to put caret (cross-browser) at the end of line on focus试图将插入符号(跨浏览器)放在行尾的焦点上
【发布时间】:2017-01-04 05:39:37
【问题描述】:

考虑以下contenteditable 元素

<div contenteditable>
    Foo bar <span contenteditable="false"></span>x</div>

DEMO

现在,这里发生的好事是,无论您使用哪种浏览器,如果您单击内部某处,插入符号始终位于 x 之后。

但是,因为我不希望 x 出现在行尾并且您删除了 x,所以插入符号所在的行为是不同的(Safari 和 Edge 会做一些奇怪的事情)。所以,我认为当contenteditable 的最后一行以不可编辑的span 结尾时,你会遇到问题,所以我这样做了

<div contenteditbale>Foo Bar <span con...="false"><span></span></div>

这实际上根本没有帮助,同样的行为。似乎插入符号不会显示在空范围内

有什么建议可以解决这个问题吗?

【问题讨论】:

    标签: javascript html cross-browser contenteditable


    【解决方案1】:

    那么你是说插入符号在跨度内,还是它是一个单独的元素?您可以创建一个CSS Pseudo Element 将插入符号放置在您想要的位置。只需使用:

    div::after {
        content: url(caret.png);
    }
    

    这是更新后的DEMO

    【讨论】:

    • 就我而言,我需要使用本地插入符号,这意味着我不能使用png
    • 在“内容”中包含您想要的任何内容。关键是你可能会使用伪元素来实现你的目标,除非我误解了你想要实现的目标。这会将插入符号元素放在 contenteditable div 之后,并且应该避免在 div 内创建可编辑子元素的问题。如果放置是一个问题,那么您可以将 css 调整为 div ::after 以将插入符号放置在您需要的位置(相对于原始 div)。
    • 啊,我明白了,我误解了你的回答。不幸的是,如果我在 Safari 中打开它,插入符号没有放在不可编辑跨度之后?
    • 所以如果你想在span之后,你可以把“div::after”改成“span ::after”。如果问题是定位,您可以随时调整伪元素内部的定位。例如,"span::after { content: "caret"; margin-left: 5px}" 等,你能提供你当前的代码吗?
    • 我使用 javascript 创建了一个解决方案:jsfiddle
    猜你喜欢
    • 2013-03-28
    • 2011-05-13
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多