首先是 FCKEditor 的一個升級之後出現的 bug。原因不明,只知道在 IE6/7 底下會出狀況,之前的版本似乎不會,解決的辦法:
沒有。
詳細網址如下:http://www.fckeditor.net/forums/viewtopic.php?f=6&t=8814&start=0&st=0&sk=t&sd=a
嗯,這是個很嚴重的問題。因為在這個編輯器底下,我需要這種功能。後來透過一些垃圾方法測試過後發現,其實他不是失效,而是對於 DOM 裡面的 elements 有點感冒。換句話說,在選取這個動作,如果不是選取一個"元件"的話,其實他是可以正常運作的,但是,如果單單選取了某個元件的話,那麼它就會失效了。
解決的辦法是,從 DOM Tree 去 Hack 掉!方法一樣很垃圾,但是沒辦法,為了要能夠使用,所以只能這樣做。至於說,如果從編輯器裡面把元件洗出來編輯,那要怎麼放回編輯器呢?這種問題交給後端處理就好了,不用太傷腦筋啦(無責)。只是,這種 Hack 的方式,可能把它寫成 prototype 會比較方便一點吧(僅猜測、純嘴砲)。
function FCKeditor_OnComplete( editorInstance )
{
try {
editorInstance.Events.AttachEvent( 'OnSelectionChange', getSelectionHTML ) ;
} catch(e) {}
}
function getSelectionHTML( editorInstance )
{
try {
var item = "";
var selection = (editorInstance.EditorWindow.getSelection ? editorInstance.EditorWindow.getSelection() : editorInstance.EditorDocument.selection);
var range = (editorInstance.EditorWindow.getSelection ? selection.getRangeAt(selection.rangeCount - 1).cloneRange() : selection.createRange());
if (editorInstance.EditorDocument.selection)
{
try {
// rebuild the Selected "Element" which you got.
var e = editorInstance.Selection.GetSelectedElement();
if(e.tagName=="IMG") {
var OrgE = '<img ';
// rebuild the attributes
if(e.getAttribute('src')) OrgE += 'src="'+e.getAttribute('src')+'" ';
if(e.getAttribute('alt')) OrgE += 'alt="'+e.getAttribute('alt')+'" />';
item = OrgE;
} else if(e.tagName=="DIV") {
var OrgE = '<div ';
// rebuild the attributes
if(e.getAttribute('title')) OrgE += 'title="'+e.getAttribute('title')+'"></div>';
item = OrgE;
} else {
item = range.htmlText;
}
} catch(z) {
item = range.htmlText;
}
}
else
{
var clonedSelection = range.cloneContents();
var div = document.createElement('div');
div.appendChild(clonedSelection);
item = div.innerHTML;
}
if((item.substring(1,4)=='img'||item.substring(1,4)=='div')) {
// do something here.
alert(item);
}
} catch(e) {}
}
最後,我還是要靠北一下,我操你媽 IE!