Вы указали, что создали плагин, который обрабатывает объект, но проблема, которую вы хотите решить, заключается в невозможности вставки содержимого перед объектом, когда это первый элемент.
Похоже, что этот отчет об ошибке о выпуске:
Can't move cursor behind non-editable element (or placeholder) in CKEditor
Я использовал свой плагин, чтобы вставить этот блок кода в редактор:
<div contenteditable="false">
<img src="someimage.jpg" />
<p>
Some text
<span>Some subtext</span>
</p>
<img src="someStaticImage.jpg" />
</div>
Вы можете также добавить в display: inline-block;
стиль если вы хотите (см. обсуждение ниже):
Из моих тестов кажется, что вы не можете размещать контент перед объектом, используя задний строка, но если вы вернете стрелку в эту строку содержимого и нажмите на главную ключ, вы можете ввести перед объектом. Также кажется, что если вы нажмете мышью в верхнем левом углу, вы можете добавить контент перед объектом.
Оба подхода подталкивают объект к следующей строке, потому что это <div>
, вы можете изменить стиль div на display: inline-block;
, если вы хотите, чтобы объект оставался в первой строке. Я попытался просто сделать объект <div>
a <span>
вместо этого, но затем становится возможным редактировать части объекта.
Вы не можете использовать backspace, чтобы удалить объект, но вы можете щелкнуть объект, чтобы выбрать его, а затем удалить.
Я проверил информацию рассмотренную выше с Firefox 20 и IE 9 на Win 7. Google Chrome имеет кучу проблем:
Когда блок HTML вставляется с плагином, атрибут contenteditable="false"
удаляется из.
Итак, я попытался посмотреть, как это работает, если я только что вставил этот блок кода в CkEditor в режиме источника. Атрибут contenteditable="false"
не был удален, но вся область содержимого стала недействительной.
Мои тесты использовали CkEditor 3.6.1, так что это не может быть проблемой в CkEditor 4.X.
Это сообщение об ошибке, как представляется, о проблеме я столкнулся с невозможностью сделать что-нибудь в области содержимого с помощью Chrome, указывается в сообщении версии 3.X:
ContentEditable, Image and Chrome
Дополнительная информация
Вот плагин от CKSource, которые могут быть полезны:
Magic Line
описание:
с помощью этого плагина вы можете с повторять новые абзацы в пространствах, где обычно невозможно достичь. Например, над таблицей в начале документа.
Вот мой плагин, который вставляет содержимое в редактор, это не решает проблемы у вас есть, но вы можете использовать его для добавления функциональности вашего плагина. Я напишу полные инструкции, если кто-то, кто не создал плагин, найдет это и хочет попробовать.
Вот код, который идет в ckeditor/plugins/cwmarinsertsnippet/plugin.js
файле:
/**
* Plugin to insert the contents of an element into the editor content area.
*/
// Register the plugin with the editor. cwmarinsertsnippet
// http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.plugins.html
CKEDITOR.plugins.add('cwmarinsertsnippet',
{
// The plugin initialization logic goes inside this method.
// http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.pluginDefinition.html#init
init: function(editor)
{
// Define an editor command that grabs the content of an element and inserts it into the content area.
// http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#addCommand
editor.addCommand('cwMarInsertSnippet',
{
// Define a function that will be fired when the command is executed.
// http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.commandDefinition.html#exec
exec : function(editor)
{
// Create an element based on a native DOM element.
var codesnippet = new CKEDITOR.dom.element(document.getElementById('resmar'));
//alert(codesnippet.getHtml());
// Insert the element content into the document.
// http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#insertHtml
editor.insertHtml(codesnippet.getHtml());
}
});
// Create a toolbar button that executes the plugin command.
// http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.ui.html#addButton
editor.ui.addButton('CwMarInsertSnippet',
{
// Toolbar button tooltip.
label: 'Insert Search Box',
// Reference to the plugin command name.
command: 'cwMarInsertSnippet',
// Button's icon file path.
icon: this.path + 'images/buttonicon.gif'
});
}
});
Она должна быть добавлена в файл конфигурации с:
config.extraPlugins = 'cwmarinsertsnippet';
и сделать кнопку видимым, имя кнопки «CwMarInsertSnippet» необходимо добавить в запись на панели конфигурации:
CKEDITOR.config.toolbar_XXXX
[
Snip...
{ name: 'tools', items : [ 'About','CwMarInsertSnippet' ] },
... End Snip
];
Кнопка для плагина должна быть 13px X 13px (для CkEditor 3.X, не уверен в версии 4.X). Он получает размещены здесь:
CKEditor/плагины/cwmarinsertsnippet/изображения
Имя должно соответствовать той, которая используется в функции editor.ui.addButton
в конце кода плагина (этот путь действительно может быть в любом месте вы хотите).
Вот пример кода, который будет добавлен к странице, где используется CKEditor:
<div id ="resmar">
<div contenteditable="false">
<img src="someimage.jpg" />
<p>
Some text
<span>Some subtext</span>
</p>
<img src="someStaticImage.jpg" />
</div>
</div>
Вы также можете добавить display: inline-block;
стиль, если вы хотите:
<div style="display:inline-block" contenteditable="false">
Элемент контейнера может быть скрыт при стилизации, если он не должен отображаться на странице.
В принципе, просто поместите содержимое, которое требуется вставить в элемент с целевым ID
<div id ="resmar">
Content to be inserted.
</div>
Конечно название плагина и элемент ID может быть все что угодно.
Что делать, если у вас есть плагин, вставьте пустой div, прежде чем он вставляет блок, возможно, тогда вы сможете поместить курсор перед его вставкой, даже если он наверху? – codewaggle
Хорошая идея, но CKEditor автоматически вставляет внутри пустого элемента (и я хочу эту функциональность для других элементов), поэтому пространство создается над элементом, которого я не хочу. А также, я хочу, чтобы иметь возможность щелкнуть по правому краю элемента, чтобы показать каретку, например, с изображениями. – Ratzor
Можете ли вы предоставить более подробную информацию? Какую версию CkEditor вы используете? Если 4, вы используете стандартный или встроенный метод? Было бы проще помочь, если бы вы включили более полные образцы кода: полный '
' со всем контентом, специфичным для вопроса. Любой скрипт, который используется в ''. Код плагина. Похоже, вы добавляете объект за пределы плагина, так что делает плагин? Я создал плагин, который вставляет блок в редактор (CkEditor 3.x), поэтому можно сделать это как часть плагина. – codewaggle