2010-12-09 330 views
5

問題:

我有一個CKEditor的實例在我的javascript:如何以編程方式選擇CKEDITOR中的文本範圍?

var editor = CKEDITOR.instances["id_corpo"]; 

,我需要以編程方式插入一些文字,然後選擇一些文本範圍之後。

我已經沒過

editor.insertHtml('<h1 id="myheader">This is a foobar header</h1>'); 

插入文字,但我需要選擇(高亮)詞「foobar的」編程通過JavaScript,這樣我就可以使用硒與我的CKEditor摸出一些功能測試插件。

更新1:

我也試着像

var selection = editor.getSelection(); 
var childs = editor.document.getElementsByTag("p"); 
selection.selectElement(childs); 

但並不在所有的工作!

我該怎麼做?

我認爲

selection.selectRange() 

可以做的工作,但I'could不知道如何使用它。 有沒有例子那邊:(

+0

我已經試過selectElement,但沒有成功 – 2010-12-09 18:37:40

+0

getElementsByTag返回一組元素。仔細檢查你正在使用的對象是什麼,它們的方法和屬性以及是否有任何錯誤。當不清楚某些方法做了什麼或者爲什麼會失敗時,可以使用CKEditor源文件調試調用。 – AlfonsoML 2010-12-10 18:24:28

回答

-1

插入文本

  • 函數insertVar(myValue){CKEDITOR.instances ['editor1'] { }。fire('insertText',myValue); }

    ,這是爲我工作

8

獲取當前選擇

var editor = CKEDITOR.instances["id_corpo"]; 
var sel = editor.getSelection(); 

將選擇更改爲當前元素

var element = sel.getStartElement(); 
sel.selectElement(element); 

移動範圍,你想文本選擇

var findString = 'foobar'; 
var ranges = editor.getSelection().getRanges(); 
var startIndex = element.getHtml().indexOf(findString); 
if (startIndex != -1) { 
    ranges[0].setStart(element.getFirst(), startIndex); 
    ranges[0].setEnd(element.getFirst(), startIndex + findString.length); 
    sel.selectRanges([ranges[0]]); 
} 
3

你也可以做到以下幾點:

獲得當前選擇

如果沒有被選中,那麼創建一個新的paragraf元素

if (!selectedElement) 
    selectedElement = new CKEDITOR.dom.element('p'); 

將您的內容轉換成元素

selectedElement.setHtml(someHtml); 

如果需要,插入元素到DOM(它會被插入到當前位置)

editor.insertElement(selectedElement); 

,然後選擇它

selection.selectElement(selectedElement); 
相關問題