2013-03-07 30 views
2

我在CKEDITOR中定位很多。 但我仍然不明白爲什麼下面的代碼 有時不起作用?CKEDITOR - 設置插頁結束

var range = new CKEDITOR.dom.range(editor.document); 
    range.moveToElementEditablePosition(element, setToEnd); 
    editor.getSelection().selectRanges([range]); 

我認爲它與我給的元素輸入有關。 但我不確定。

有沒有人知道moveToElementEditbalePosition的工作要求是什麼? 我最後一次檢查我的輸入是一個SPAN元素。

http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-moveToElementEditablePosition

或者是有一個更安全的(跨瀏覽器)解決方案?

==== ====編輯

我發現了一個錯誤,這是來自新CKEDITOR.dom.range未來

類型錯誤:b爲未定義

這意味着編輯器.document是空的,但是當我在editor.document中查看它是否被填充?

當我試圖設置範圍內的第二次錯誤也它顯示了以下錯誤後:未捕獲的異常:拋出:DOMException:INVALID_STATE_ERR

回答

3

試試這個HTML:

<p><span id="test">Text</span></p> 

而這個JS :

var e = CKEDITOR.instances.editor1; 
var span = e.document.getById('test'); 
var range = e.createRange(); 

range.moveToElementEditablePosition(span, 1); 
range.select(); 
e.insertText('FOO'); 

range.moveToElementEditablePosition(span); 
range.select(); 
e.insertText('BAR'); 

結果似乎是正確的:

<p><span>BARTextFOO</span></p> 

你還有其他情況嗎?

+0

您的解決方案更短,更清潔。並且可以使用getByID代碼,也可以使用getNextNode()來查找元素。 我不知道它是否與我使用的新CKEDITOR.dom.range版本有關。但是您的解決方案一如既往! – spons 2013-03-07 11:15:33