我有一些允许用户创作内容的 CMS 代码。我想显示在相应文本区域中键入的文本的预览(很像在 stakeoverflow 中的此处)。首次加载页面时,textarea 已被填充,并且 JavaScript 用于更新预览。预览部分的 DOM 完全更新后,将对预览部分执行进一步的后处理。
我发现了问题jQuery/Javascript - How to wait for compatible DOM to update before execution of interest 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);
}