ホームページ > ウェブフロントエンド > jsチュートリアル > 特定の DOM 要素が表示されるまで JavaScript の実行を一時停止するにはどうすればよいですか?

特定の DOM 要素が表示されるまで JavaScript の実行を一時停止するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-09 14:46:14
オリジナル
885 人が閲覧しました

How Can I Pause JavaScript Execution Until a Specific DOM Element Appears?

要素が表示されるまでコードを一時停止する方法

Web 開発では、多くの場合、特定の要素が存在する場合にのみアクションを実行する必要があります。ページ。これにより、特に JavaScript などの非同期環境で、要素の存在をどのように判断するかという問題が生じます。

解決策: MutationObserver API の活用

MutationObserver API は、堅牢な機能を提供します。 DOM 内の変更を検出するためのソリューション。オブザーバー インスタンスを作成し、それを目的の要素またはその親に割り当てることで、監視領域内で突然変異 (追加、削除、または属性の変更) が発生したときにトリガーされるコールバックを設定できます。

実装

提供されたコード スニペットは、次を使用して再利用可能な waitForElm 関数を作成する方法を示しています。 MutationObserver:

function waitForElm(selector) {
    return new Promise(resolve => {
        if (document.querySelector(selector)) {
            return resolve(document.querySelector(selector));
        }

        const observer = new MutationObserver(mutations => {
            if (document.querySelector(selector)) {
                observer.disconnect();
                resolve(document.querySelector(selector));
            }
        });

        observer.observe(document.body, {
            childList: true,
            subtree: true
        });
    });
}
ログイン後にコピー

使用法

クラス 'some-class' を持つ要素が表示されるのを待つには、次を使用できます:

waitForElm('.some-class').then((elm) => {
    console.log('Element is ready');
    console.log(elm.textContent);
});
ログイン後にコピー

あるいは、 async/await:

const elm = await waitForElm('.some-class');
ログイン後にコピー

このアプローチには、次のようないくつかの利点があります。

  • ノンブロッキング: 変更を受動的に監視する MutationObserver API を使用します。メインスレッドをブロックせずに。
  • いいえ依存関係: ネイティブ API のみに依存し、サードパーティ ライブラリの必要性を回避します。
  • Promise-Based: Promise を返し、要素の外観を簡単に処理できるようにします。 .then() または async/await を使用します。

以上が特定の DOM 要素が表示されるまで JavaScript の実行を一時停止するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート