我將提供解決節點大小限制問題的第一種方法。我修改了unescapeHtml代碼,通過創建循環遍歷每個childNode並將nodeValues附加到結果的循環來處理Firefox將數據拆分爲多個節點。然後,該函數清理與Matt Thommes' concise remove all child nodes code
幫助的節點我的代碼如下:
//htmlToCKEditor
// Arguments:
// 1. contentCK - Escaped content (likely HTML) to be inserted into CKEditor. (string)
// 2. targetCK- The ID of the target CKEditor instance. (string)
// Creates a temporary element, inserts the escaped content into the innerHTML,
// loops over every childNode, appends each nodeValue to the result string,
// removes the temporary element's child nodes, sets the data of the CKEditor to the new unescaped value.
function htmlToCKEditor (contentCK,targetCK) {
// Return false if there's no target CKEditor instance
if (!(targetCK.match(/\w+/))){
return false;
}
if (contentCK.match(/\w+/)){
var thisHTML = unescape(contentCK);
var temp = document.createElement("div");
temp.innerHTML = thisHTML;
// Loop over childNodes and append values to result variable.
var result = '';
for (var i=0; i < temp.childNodes.length; i++){
result += temp.childNodes[i].nodeValue;
}
// Cleanup from Matt Thommes
if (temp.hasChildNodes()){
while (temp.childNodes.length >= 1){
temp.removeChild(temp.firstChild);
}
}
// Set CKEditor instance of choice with the newly unescaped result.
CKEDITOR.instances[targetCK].setData(result);
}else{
CKEDITOR.instances[targetCK].setData('');
}
return true;
}
有一些替代的方法一個可能需要做到這一點,所以我改進我的問題和分裂我的代碼作爲答案。我很想讀這個問題的更多解決方案,因爲我不完全熟悉CKEditor方法,並且CKEditor中可能有一個更簡單的解決方案。
這樣的問題存在的問題是:A)他們實際上不是問題,B)他們太廣泛了,基本上是無法回答的,C)他們沒有像「這個人在尋求幫助」那樣的感覺,他們感覺就像「這個人要求我完善他的代碼,以便他不必」。這使得任何人都無法給出令人滿意的答案(不是任何人都希望每C)。我建議修改這篇文章來問一個具體的問題(例如,「有沒有更快的方法來做這一個循環?」,而不僅僅是「你有任何改進性能或可讀性的建議嗎?」)。 – machineghost 2009-10-20 22:39:05
感謝您的反饋。我是StackOverflow的新手,可以看到它被鼓勵發佈更具體的「我該怎麼做X」的問題。我故意將這個問題留作廣泛邀請進行一般性討論,我的意圖不是限制迴應選項。我會稍微改進我的問題。 – 2009-10-21 23:14:03