2012-04-19 25 views
23

Próbuję dodać fragment tekstu do istniejącego CKEditor przy użyciu jQuery. Należy to zrobić po kliknięciu łącza.Wstaw tekst w pozycji kursora do CKEditor przy użyciu jQuery

Próbowałem to rozwiązanie, które działa na regularne pola tekstowe, ale nie dla CKEditor:

jQuery.fn.extend({ 
    insertAtCaret: function(myValue) { 
    return this.each(function(i) { 
     if (document.selection) { 
     //For browsers like Internet Explorer 
     this.focus(); 
     sel = document.selection.createRange(); 
     sel.text = myValue; 
     this.focus(); 
     } else if (this.selectionStart || this.selectionStart == '0') { 
     //For browsers like Firefox and Webkit based 
     var startPos = this.selectionStart; 
     var endPos = this.selectionEnd; 
     var scrollTop = this.scrollTop; 
     this.value = this.value.substring(0, startPos) + myValue + this.value.substring(endPos, this.value.length); 
     this.focus(); 
     this.selectionStart = startPos + myValue.length; 
     this.selectionEnd = startPos + myValue.length; 
     this.scrollTop = scrollTop; 
     } else { 
     this.value += myValue; 
     this.focus(); 
     } 
    }) 
    } 
}); 

Istnieje również możliwość użycia: $('#editor').val(), ale to Dołącza tekst na koniec lub początek i nie przy kursorze.

Czy istnieje sposób, aby to osiągnąć?

Odpowiedz

33

Należy użyć tej

$.fn.insertAtCaret = function (myValue) { 
    myValue = myValue.trim(); 
    CKEDITOR.instances['idofeditor'].insertText(myValue); 
}; 
+5

Great! Dziękuję Ci! Wprowadziłem niewielką zmianę: 'CKEDITOR.instances [$ (this) .attr (" id ")]. InsertText (myValue);' więc nie muszę się martwić o identyfikator. – Phoenix

+0

okrzyki! @Feniks – Devjosh

15

Sam CKEditor ma mechanizm wstawiania tekstu. Jeśli zaktualizujesz kod textarea bezpośrednio, oznacza to, że niektóre z mechanizmów CKEditor musi śledzić, jaki tekst został wprowadzony. Spróbuj tego:

CKEDITOR.instances.IDofEditor.insertText('some text here'); 

More information here

3

myślałem, należy wspomnieć, że w przypadku korzystania z zasilacza jQuery dla CKEditor można wstawić tekst z jQuery ten sposób, wygląda trochę czystszy.

$('textarea#id_body').ckeditor().editor.insertText('some text here'); 

lub jeśli wstawiasz HTML

$('textarea#id_body').ckeditor().editor.insertHtml('<a href="#">text</a>'); 
Powiązane problemy