Maison >interface Web >js tutoriel >Comment puis-je attendre efficacement l'existence d'un élément en JavaScript ?

Comment puis-je attendre efficacement l'existence d'un élément en JavaScript ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-10 00:23:14566parcourir

How Can I Efficiently Await Element Existence in JavaScript?

Attendre l'existence d'un élément avec MutationObserver

Comme vous l'avez constaté lors du développement de votre extension Chrome, il est crucial de savoir quand un élément devient disponible sur la page. Bien que l’utilisation d’intervalles pour vérifier son apparence soit une approche courante, elle peut s’avérer inefficace. Heureusement, jQuery ne fournit pas de solution simple.

Une alternative moderne et efficace consiste à utiliser l'API MutationObserver. Cela vous permet de créer une fonction JavaScript qui écoute les modifications dans l'arborescence DOM :

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
        });
    });
}

Cette fonction prend un sélecteur en entrée et renvoie une promesse qui se résout lorsque l'élément est trouvé.

Pour l'utiliser, vous pouvez écrire :

waitForElm('.some-class').then((elm) => {
    console.log('Element is ready');
    console.log(elm.textContent);
});

Ou, avec async/await :

const elm = await waitForElm('.some-class');

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn