【发布时间】:2017-11-27 20:29:13
【问题描述】:
我在使用自定义 CKEditor 插件创建自定义跨度标签时遇到问题。该插件接受dataAttribute、dataValue 和specificContent 的用户输入。然后在对话框的onOk 上,我创建了一个 span 元素并将其附加到编辑器中。
// Create the span element
var span = new CKEDITOR.dom.element('span');
// Add the attributes to the span.
span.data(dataAttribute, dataValue);
span.setHtml(specificContent);
// span.contentEditable = false;
// Finally insert the element into the editor.
editor.insertElement(span);
// I have created a dummy element to place the cursor outside the actual span tag.
var dummySpan = new CKEDITOR.dom.element('span');
dummySpan.addClass('dummy-span');
dummySpan.setText(' ');
// after section dealing with editing a selected item, in "else":
var sel = editor.getSelection(); // current cursor position
editor.insertElement(span); // the real new element
if(CKEDITOR.env.ie || CKEDITOR.env.webkit) {
dummySpan.insertAfter(span);
sel.selectElement(dummySpan);
}
else {
dummySpan.insertAfter(span);
var rangeObjForSelection = new CKEDITOR.dom.range( editor.document );
rangeObjForSelection.selectNodeContents(dummySpan);
editor.getSelection().selectRanges( [ rangeObjForSelection ] );
}
代码运行良好,生成了预期的标记并将其插入到光标位置。例如:
<span data-school='seven-high'>Seven High, Eleven</span>
<span class='dummy'></span>
问题在于插件小部件的持续使用。标记可能会变成错误。这是因为光标可以放在 span 标签内。例如:插入第一个跨度内容后,光标在span.dummy,如果我添加一个空格,然后尝试添加第二个跨度内容,则在span.dummy内添加空格,并生成第二个错误的标记跨度内容。
<span data-school='seven-high'>Seven High, Eleven</span>
<span class='dummy'>
<span data-school='seven-high'>Seven High, Eleven</span>
<span class='dummy'></span>
<span data-school='seven-high'>Seven High, Eleven</span>
<span class='dummy'></span>
</span>
or
<span data-school='seven-high'>Seven High, Eleven</span>
<span class='dummy'>
<span data-school='seven-high'>Seven High, Eleven</span>
<span class='dummy'>
<span data-school='seven-high'>Seven High, Eleven</span>
<span class='dummy'></span>
</span>
</span>
上述预期标记:
<span data-school='seven-high'>Seven High, Eleven</span>
<span class='dummy'></span>
<span data-school='seven-high'>Seven High, Eleven</span>
<span class='dummy'></span>
<span data-school='seven-high'>Seven High, Eleven</span>
<span class='dummy'></span>
有没有办法确保用户永远无法将光标放在 CKEditor 创建的 span 标签内,即冻结 CKEditor 创建的 span 标签?
注意:我也在使用数据处理器:dataFilter 和 htmlFilter。
这是我第一次尝试创建 CKEditor 插件(用于 Drupal 所见即所得)。所以我对这个问题的所有解决方案持开放态度。 注意:跨度标签应该使用解决方案按预期创建。
【问题讨论】:
标签: javascript jquery drupal-7 ckeditor