2012-06-26 59 views
0

我有一个CKEDITOR,我试图将内容分成n部分,用户通过将光标放在CKEDITOR的特定位置上来指示他想要的部分,之后,随着在上下文菜单中,用户选择“分块”的选项,这将插入在CKEDITOR上分割内容并获取每个部分的HTML


标签在HTML:

用户可以做CKEDITOR这N次,这是为了表明有多少块用户想要分割内容,插入的每个小时是一个块。

所以当用户完成后,点击上下文菜单中的“处理拆分”,这个动作应该执行并将内容拆分为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; 

} 

的问题是:如何从文件的begining选择第一人力资源等。

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

回答

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

+0

是的,您的解决方案适用于我,我非常感谢您的帮助。 – leandroosalas

相关问题