2009-10-15 64 views
1

我一直在搜索,試圖找出爲什麼IE不會保存當前插入符的位置,然後重新加載它。要描述這種情況,它的工作原理是這樣的:Tinymce IE6 +如何獲得工作範圍?

客戶希望Tinymce定製的ajax圖像加載器簡單易用,任何「白癡」都可以在文本編輯器中上傳圖像並將其設置爲圖像,讓它看起來不錯。我們有很多客戶喜歡從word和fckeditor粘貼,而不是再削減它。無論如何,ajax /上傳器的所有工作都完美無瑕。將圖像輸入編輯器時會出現問題。 FF/Opera/Crome等,工作完美無瑕,但IE當然存在問題。

下面是我需要的一個答案,Tinymce失去了焦點,因爲上傳彈出了一個jQuery對話框(該功能不能作爲插件開發,他們需要外部工具,所以沒有tinyMCEPopUp類/函數可以工作所以我不能簡單地調用tinyMCEPopup.restore())我需要保存圖像的插入位置/選擇並將其存儲/傳遞給一些函數,並在放置時恢復選擇。

我試着做數以百計的方法只有一個曾作爲得到正確的選擇長度,但仍然光標在pos 0這已經在IE

創建範圍對象時
if(document.selection) { 
b = document.getElementById('txtarea'); 
range = b.createTextRange(); 
//the rest of the jaz 
} 

我的工作很多消息人士都告訴我們,從DOM獲取它不會工作,因爲Tinymce是在iframe內部構建的,但是createRange()也不是當前存儲的。如果有人知道或已經找到了解決方法,我會非常感激,但我已經花了16個小時的開發時間試圖解決這個問題。使用tinyMCE.activeEditor.selection.getBookmark()也沒有骰子。我平均在JavaScript,我知道我的方式,但它是突出的不是我的強項,PHP /後端/軟件開發是。所以當有一個簡單的解決方案時,這可能只是我愚蠢。

謝謝你的時間。

+0

當你調用tinyMCE.activeEditor.selection.getBookmark()?我認爲這可能是你需要的,你可能只是在錯誤的時間調用它。 – 2009-10-15 08:22:01

+0

我在設置中調用它:function(ed){在ed.onClick.add(function(ed){{檢測節點名是否爲img,然後在jQuery對話框爲即使是打電話,所以有焦點 – Dreamcube 2009-10-15 13:59:06

回答

3

我仍然認爲TinyMCE會爲你做這件事,但我不是專家,現在還沒有時間玩它(也許以後)。我知道選擇和範圍,所以你可能會適應下面的功能爲您的目的。你需要在window對象編輯器IFRAME傳遞到兩個功能:

function saveSelection(win) { 
    var doc = win.document; 
    var sel = win.getSelection ? win.getSelection() : doc.selection; 
    var range; 

    if (sel) { 
     if (sel.createRange) { 
     range = sel.createRange(); 
     } else if (sel.getRangeAt) { 
     range = sel.getRangeAt(0); 
     } else if (sel.anchorNode && sel.focusNode && doc.createRange) { 
     // Older WebKit browsers 
     range = doc.createRange(); 
     range.setStart(sel.anchorNode, sel.anchorOffset); 
     range.setEnd(sel.focusNode, sel.focusOffset); 

     // Handle the case when the selection was selected backwards (from the end to the start in the 
     // document) 
     if (range.collapsed !== sel.isCollapsed) { 
     range.setStart(sel.focusNode, sel.focusOffset); 
     range.setEnd(sel.anchorNode, sel.anchorOffset); 
     } 
     } 
    } 
    return range; 
    } 

    function restoreSelection(win, range) { 
    var doc = win.document; 
    var sel = win.getSelection ? win.getSelection() : doc.selection; 

    if (sel && range) { 
     if (range.select) { 
     range.select(); 
     } else if (sel.removeAllRanges && sel.addRange) { 
     sel.removeAllRanges(); 
     sel.addRange(range); 
     } 
    } 
    } 
+0

非常感謝你,完美的工作!這清除了一個主要的頭痛,再次感謝非常感謝 – Dreamcube 2009-10-15 17:10:37

+0

哦,我的fg!非常感謝發佈這!我花了過去6小時嘗試各種各樣的巫術,使我的jQuery對話框在正確的位置發送一個圖像到wordpress edior。一切工作在鉻和FF,但IE拒絕將插入的內容放置在插入位置 謝謝@Dreamcube提出問題有足夠的可識別的短語讓它在谷歌搜索中被拾起 Tim Down - 我將帽子丟在你身上好先生 – CommentLuv 2011-12-15 10:42:50

+0

@CommentLuv:高興地幫助:) – 2011-12-15 11:07:20