在CKEDITOR上拆分内容并获取每个部分的HTML

时间:2012-06-26 17:07:04

标签: javascript jquery split ckeditor

我有一个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等等。

非常感谢,我一直试图这样做超过一个星期,我不知道还有什么尝试。

1 个答案:

答案 0 :(得分:0)

我没有仔细分析你的代码,因为我甚至都不知道你想要实现的目标。但这里有一些可以帮助你的笔记。

  1. 您未正确使用CKEDITOR.dom.range#setStart#setEnd。您应该使用setStartAtsetEndAt。您使用的方法将offset作为第二个参数,而不是位置。

  2. 选择从文档开头到第一个HR(包括它)的内容:

    var range = new CKEDITOR.dom.range( document );
    range.setStart( document.getBody(), 0 );
    range.setEndAt( hr, CKEDITOR.POSITION_AFTER_END );
    range.select();
    
  3. 在您的代码中,我看到您正在尝试选择多个范围 - 它不会以这种方式工作。 AFAIK只有Firefox处理多个选择,但我不知道CKEditor是否可以。如果是,那么CKEDITOR.dom.selection#selectRanges就是您所需要的。但是,如果您只是尝试提取范围内容,则不必先选择它们。