2011-12-29 172 views
6

我已經創建了一個tinyMCE插件,用於使用MathJax在編輯器中插入數學公式。 該插件在iframe中打開一個彈出窗口(使用jQuery),然後啓動觸發器事件以將輸入的公式插入到tinyMCE活動編輯器中。tinymce.selection.setContent在IE中的textarea開頭處插入文本

我的代碼在Chrome中正常工作& Firefox(創建插入到textarea插入位置的pre),但在IE中,文本插入到textarea的開頭。

我使用setContent方法是這樣的:

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

我試圖插入和StackOverflow的發現,但沒有爲我工作的其他建議之前使用ed.focus()

此外,我試圖在打開彈出窗口之前保存插入位置,並在插入時恢復它,但無論如何都無法工作。

任何想法?

在此先感謝。

回答

6

解決:

我知道,這不是最優雅的解決方案,但對我的作品。

打開彈出之前,我插入一個「跨度」與和特定ID是這樣的:

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

然後,當彈出窗口關閉,文本發送回編輯器,我看的跨度該標記,然後我選擇它,並呼籲setContent

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

這適用於所有的瀏覽器!請記住,如果關閉彈出窗口而不插入任何內容以避免在編輯器中留下垃圾,請刪除該跨度。

:-)

0

嘗試這樣:

 

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(); 
    } 
 

希望它爲你工作。

+0

不要工作:(現在我想在打開彈出窗口前保存位置,我會盡快更新。謝謝:) – vfportero 2011-12-29 12:00:28

0

您好,我使用jQuery插件之一,稱爲jCaret這種情況。 在大多數通常使用的瀏覽器(IE 7,8,9兼容模式)下工作得很好。

看一看在鏈接中給出的例子如下

jCaret

感謝

+0

我會看看你的建議。謝謝! – vfportero 2011-12-30 08:32:15

1

簡單地刪除。選擇部分,所以你的代碼看起來應該像

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

1

在IE8中無法得到積極的編輯器,因此需要關注,所以使用

tinyMCE.activeEditor.focus();

希望它適合你。