0

私は CKEDITOR を持っていて、コンテンツを n 個の部分に分割しようとしています。ユーザーは、カーソルを CKEDITOR の特定の位置に置き、その後、ユーザーが選択したコンテキスト メニューのオプションを使用して、必要な部分の数を示します。 「分割ブロック」、これは


HTML のタグ:

ユーザーはCKEDITORでこれをn回実行できます。これは、ユーザーがコンテンツを分割したいブロックの数を示すためのもので、挿入される各時間は1ブロックです。

したがって、ユーザーが終了したら、コンテキスト メニューの [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週間以上やろうとしてきましたが、他に何をしようとしているのかわかりません.

4

1 に答える 1

0

あなたが何を達成しようとしているのかさえわからないので、私はあなたのコードを注意深く分析していません。しかし、ここに役立ついくつかのメモがあります。

  1. 不適切CKEDITOR.dom.range#setStartに使用する。#setEndと を利用する必要がsetStartAtありsetEndAtます。使用したメソッドは、位置ではなく、2 番目の引数としてオフセットを取ります。

  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 のみが複数選択を処理しますが、CKEditor が処理するかどうかはわかりません。はいの場合CKEDITOR.dom.selection#selectRangesは、必要なものです。ただし、範囲の内容のみを抽出しようとしている場合は、最初にそれらを選択する必要はありません。

于 2012-06-26T18:17:11.720 に答える