我有一些允許用戶創作內容的CMS代碼。我想要顯示在相應的textarea中鍵入的文本的預覽(很像這裏的放置流程)。當第一次加載頁面時,textarea已經被填充並且JavaScript被用於更新預覽。預覽部分的DOM完全更新後,會在預覽部分執行進一步的後處理。在進一步處理之前等待動態DOM更新
我找到了感興趣的問題jQuery/Javascript - How to wait for manipulated DOM to update before proceeding with function,但它的答案依賴於setTimeout(),我發現它在過去有些問題,因爲不清楚在執行前要暫停多少秒鐘。
約有50%的時間,我的後期處理過早解僱,因爲DOM沒有完成更新。爲了解決這個問題,我嘗試過使用jQuery的回調隊列機制。
什麼是確保動態修改的DOM在加載之前首先加載的最佳方法?
例如,
// using the provided source content, update the DOM indicated by
// the destination css selector string
function updatePreview(cssSelectorDst, content){
$(cssSelectorDst).html(content);
console.log("preview updated");
}
// if a <ul> appears at the beginning of the content, designate it
// as a keypoints section
function updateKeypoints(cssSelectorDst){
...
console.log("keypoints updated");
}
// update preview section using content from iframe (using tinyMCE)
function updateFromIframe(iframeSelector, cssSelectorSrc, cssSelectorDst){
// gather source data
var iframe = $(iframeSelector);
var content = $(iframe).contents().find(cssSelectorSrc).html();
// set up callbacks to ensure proper order and completion of actions
var callbacks = $.Callbacks();
callbacks.add(updatePreview);
callbacks.add(updateKeypoints);
callbacks.fire(cssSelectorDst, content);
}
凱文,感謝澄清html()是同步。這很好知道! – 2012-07-19 21:52:50