0

我有一个CKEDITOR,我试图将内容分成n个部分,用户通过将光标放在CKEDITOR的特定位置上来指示他想要多少个部分,然后在用户选择的上下文菜单中使用一个选项“拆分块”,这会插入一个


HTML 中的标记:

用户可以在CKEDITOR中做n次,表示用户想要分割内容的块数,每插入一个hr就是一个块。

所以当用户完成时,点击上下文菜单“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等等。

非常感谢,我已经尝试这样做一个多星期了,我不知道还有什么尝试。

4

1 回答 1

0

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

  1. 你使用CKEDITOR.dom.range#setStart不当#setEnd。您应该使用setStartAtsetEndAt。您使用的方法将偏移量作为第二个参数,而不是位置。

  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这就是您所需要的。但是,如果您只是尝试提取范围的内容,则不必先选择它们。

于 2012-06-26T18:17:11.720 回答