ユーザーがコンテンツを作成できるようにするCMSのコードがあります。対応するテキストエリアに入力されたテキストのプレビューを表示したいと思います(ここでのstakeoverflowのように)。ページが最初に読み込まれるとき、textareaはすでに入力されており、JavaScriptを使用してプレビューが更新されます。プレビューセクションのDOMが完全に更新されると、プレビューセクションでさらに後処理が実行されます。
質問jQuery/Javascript-目的の関数に進む前に操作されたDOMが更新されるのを待つ方法を見つけましたが、その答えはsetTimeout()に依存しています。実行。
DOMの更新が完了していなかったため、約50%の確率で、後処理が途中で実行されました。この問題を解決するために、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);
}