2016-08-27 3 views
0

Рассмотрим следующий contenteditable элементПопытка поставить каретку (кросс-браузер) в конце линии на фокусе

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

DEMO

Теперь, хорошая вещь происходит здесь в том, что любой браузер вы берете , каретка всегда помещается после x, если вы щелкнете где-то внутри.

Но, поскольку я не хочу x в конце строки, и вы удаляете, то поведение, в котором находится карет, отличается (сафари и край странные вещи). Таким образом, я понял, что, когда последняя строка contenteditable заканчивается span, который не редактируется у вас будут проблемы, так что я сделал

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

Что на самом деле не помогает вообще, такое же поведение. Кажется, что каретка не будет отображаться внутри пустого промежутка

Любые предложения, как исправить это?

ответ

1

Так вы говорите, что карет идет внутри пролета, или это отдельный элемент? Вы можете создать CSS Pseudo Element, чтобы разместить каретку там, где она вам понравилась. Просто используйте:

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

Вот обновленный DEMO

+0

В моем случае, мне нужно использовать родную каретку, то есть я не могу использовать 'png' –

+1

Включите все, что вы хотите в«содержании». Дело в том, что вы, вероятно, можете использовать псевдоэлемент для достижения своей цели, если я не понимаю, что вы пытаетесь выполнить. Это поместило бы элемент caret после contenteditable div, и ему следует избегать вопроса о создании редактируемого дочернего элемента внутри div. Если место размещения является проблемой, вы можете настроить css на div :: after, чтобы поместить карету там, где она вам нужна (по отношению к исходному div). – DGaffneyDC

+0

А я вижу, я неправильно понял ваш ответ. К сожалению, если я открою его в Safari, например, каретка не будет размещена после не редактируемого диапазона? –

Смежные вопросы