2016-04-06 5 views
1

Использование области contenteditable div, у меня возникают проблемы (в настоящее время они протестированы только в Chrome), где курсор не может быть помещен перед первой буквой встроенного элемента стиля, когда CSS psuedo-selector ::before используется для добавления контента до «тега».Contenteditable, :: перед выбором селектора и заданием положения курсора

Использование этого метода используется для отображения/стиля пользовательских тегов в редакторе содержимого. Каждый тег индексируется, и этот индекс отображается слева от текста тега.

Standalone пример: http://codepen.io/TheFoot/pen/pydqQb

Заранее спасибо ..

EDIT: Как @Sonny отметил, если встроенный тег display: block проблема уходит, но это нарушает необходимость выделения/встроенного стиля разделы текста.

ответ

1

звучит как маленькие зеленые приводы ошибки вы сумасшедший да? Так или иначе. Я считаю, что вы вставляете TAG через javascript, поэтому у вас должна быть какая-то функция? Одним быстрым и грязным решением может быть объявление невидимого персонажа в этой функции перед открытием тега. Так, например,

<div class="tag" data-idx="6">&#x2063;maturity...</div> 

Или вы можете просто скопировать и вставить фактический характер (вы можете найти между этими стрелками здесь:.

--->⁣<---

Как это невидимое он имитирует именно то, что вам нужно

[EDIT :]

Если вы хотите reappend невидимого символа в случае, если пользователь удаляет его :)

.

http://codepen.io/anon/pen/wddoBN

+0

Спасибо за ваш ответ. Я подумал о том, чтобы заставить персонажа впереди, но я буду использовать его в качестве крайней меры, если я не смогу найти решение для CSS.Существует много парсинга назад и вперед в формат документа, который потребует поиска и удаления этого символа. – TheFoot

+0

Кроме того, я просто попробовал персонажа, которого вы упомянули, и работает только тогда, когда встроенный тег «display: block»? У вас он работает для 'display: inline-block'? – TheFoot

+0

Я использовал ваш пример кода, который кажется встроенным блоком. – ShQ

1

Я думаю, что проблема здесь в том, что div, который доволен, - inline-block. contenteditable следует применять только к элементам уровня блока (исключая заголовки).

Ориентир несколько людей упоминали, что только блочных элементы должны быть сделаны contenteditable. Однако в Сети разработчиков Mozilla перечислены элементы заголовка h1 - h6 как элементов уровня блока, а создание элемента заголовка contenteditable - , багги в Firefox4 и может привести к сбою страницы в Chrome5.

Вы можете прочитать немного больше информации в этом ответе здесь: Which elements can be safely made contenteditable?

+1

Спасибо за ваш ответ .. Допустимый контент 'div' * is *' display: block'. Его встроенный тег, который является 'display: inline-block'. Вы правы, хотя о 'display: block' - при применении к встроенному тегу это работает. Но, конечно, это не решает мою проблему - встроенный тег должен быть встроенным/встроенным блоком. – TheFoot

+0

Да, я полностью согласен - я не мог найти решение - это игра в кодепене, поэтому я подумал, что я бы разместил небольшую информацию о контент-контенте –