2011-12-29 7 views
6

Utworzyłem wtyczkę dla tinyMCE, aby wstawić do edytora formuły matematyczne używając MathJax. Ta wtyczka otwiera wyskakujące okienko w elemencie iframe (przy użyciu jQuery), a następnie uruchamia wyzwalacz - na zdarzeniu, aby wstawić wprowadzoną formułę do edytora tinyMCE.tinymce.selection.setContent wstawia tekst na początku textarea w IE

Mój kod działa poprawnie w przeglądarce Chrome & Firefox (tworzy pre, który jest wstawiany w pozycji opiekuna textarea), ale w IE tekst jest wstawiany na początku tekstu.

Używam metody setContent tak:

tinyMCE.activeEditor.selection.setContent(text to insert, {format: 'bbcode'}); 

Próbowałem użyć ed.focus() przed włożeniem i inne zalecenia znalezione w StackOverflow ale nic nie działało na mnie.

Próbowałem również zapisać pozycję karetki przed otwarciem wyskakującego okienka i przywrócić ją podczas wstawiania, ale i tak nie działała.

Wszelkie pomysły?

Z góry dziękuję.

Odpowiedz

6

rozwiązany:

wiem, że nie jest to najbardziej eleganckie rozwiązanie, ale działa dla mnie.

Przed otwarciem popup wstawić „rozpiętość” z i konkretny identyfikator takiego:

var sel = tinyMCE.activeEditor.selection; 
sel.setContent('<span id="_math_marker">&nbsp;</span>'); 

Wtedy, gdy zamyka popup, a tekst jest odsyłany do redakcji, patrzę na przęsła z marker potem wybierz go i nazywają setContent:

var ed = tinyMCE.activeEditor; 
var marker = ed.dom.get('_math_marker'); 
ed.selection.select(marker, false); 
ed.selection.setContent("TEXT TO INSERT"); 

To działa na wszystkich przeglądarkach! Pamiętaj, aby usunąć span, jeśli wyskakujące okienko zostanie zamknięte bez wstawiania czegokolwiek, aby uniknąć pozostawienia śmieci w edytorze.

:-)

0

spróbować czegoś takiego:

 

var myField = tinyMCE.get("SMSBody"); 

    //IE support 
    if (document.selection) { 

     myField.focus(); 
     sel = document.selection.createRange(); 
     sel.text = fieldName; 
    } 
else if (document.getSelection) { 

     tinyMCE.activeEditor.selection.setContent(fieldName); 
     myField.focus(); 
    } 
 

Nadzieję, że pracuje dla Ciebie.

+0

Nie działa :(Teraz próbuję zapisać pozycję przed otwarciem popup. Będę aktualizował tak szybko jak to możliwe.Dziękuję :) – vfportero

0

Witam Użyłem jednej z wtyczek jQuery o nazwie jCaret dla tego rodzaju sytuacji. Sprawdził się doskonale w większości zwykle używanych przeglądarek (IE 7,8,9 w trybie zgodności).

Zapraszamy do obejrzenia przykładów podanych w linku poniżej

jCaret

Dzięki

+0

Spojrzę na twoją radę. Dzięki! – vfportero

1

Wystarczy usunąć.część wybór, więc kod powinien wyglądać

tinyMCE.activeEditor.setContent(text to insert, {format: 'bbcode'});

1

w IE8 w cant get aktywny edytor, więc trzeba się skupić, więc używaj

tinyMCE.activeEditor.focus();

Mam nadzieję, że to działa dla Ciebie.