我有一个CKEDITOR,我试图将内容拆分为n个部分,用户通过将光标放在CKEDITOR的特定位置,然后在上下文菜单中选择,指示他想要多少部分用户选择“拆分块”,这将在HTML中插入
用户可以在CKEDITOR中执行n次,它表示用户想要分割内容的块数,每插入一小时就是一个块。
因此,当用户完成后,单击上下文菜单“Process Split”,此操作应该执行并将内容拆分为n个部分。
这是我分割内容的代码:
var index = 0;
var tmpItem = null;
var ranges = new Array();
var elements = editor.document.getElementsByTag( 'hr' );
for ( var i = 0; i < elements.count() ; i++ )
{
var item = elements.getItem( i );
ranges[index] = new CKEDITOR.dom.range( editor.document );
if(tmpItem!=null)
ranges[index].setStart(tmpItem, CKEDITOR.POSITION_BEFORE_START);
else{
ranges[index].setStartAfter(editor.document.getBody().getFirst());
}
if(item.hasClass('split-end')){
ranges[index].setEnd(item, CKEDITOR.POSITION_BEFORE_START);
ranges[index].select();
index++;
var sel = editor.getSelection();
var ran = sel.getRanges();
var el = new CKEDITOR.dom.element("div");
for (var j = 1, len = ran.length; j < len-1; ++j) {
el.append(ran[j].cloneContents());
}
console.log( el.getHtml() );
}
tmpItem = item;
}
问题是:如何选择从文档的开头到第一个HR等等。
非常感谢,我一直试图这样做超过一个星期,我不知道还有什么尝试。
答案 0 :(得分:0)
我没有仔细分析你的代码,因为我甚至都不知道你想要实现的目标。但这里有一些可以帮助你的笔记。
您未正确使用CKEDITOR.dom.range#setStart
和#setEnd
。您应该使用setStartAt
和setEndAt
。您使用的方法将offset作为第二个参数,而不是位置。
选择从文档开头到第一个HR(包括它)的内容:
var range = new CKEDITOR.dom.range( document );
range.setStart( document.getBody(), 0 );
range.setEndAt( hr, CKEDITOR.POSITION_AFTER_END );
range.select();
在您的代码中,我看到您正在尝试选择多个范围 - 它不会以这种方式工作。 AFAIK只有Firefox处理多个选择,但我不知道CKEditor是否可以。如果是,那么CKEDITOR.dom.selection#selectRanges
就是您所需要的。但是,如果您只是尝试提取范围内容,则不必先选择它们。