【问题标题】:Waiting for element to appear before inserting javascript element not working在插入javascript元素之前等待元素出现不起作用
【发布时间】:2021-12-21 09:09:25
【问题描述】:

我正在尝试在 wordpress elementor 迷你购物车为空时添加一个按钮。为此,我想我会使用一个承诺来等待元素加载,然后插入一些相邻的 html 代码来显示按钮。

这两个部分似乎是分别返回一个承诺然后插入元素。然而,当他们一起工作时,没有元素出现?关于如何调试的任何想法?要注意什么。我如何监控每件事情的触发顺序以确保它以正确的顺序发生?

这是我下面的代码:这是 wordpress 的 sn-p。

<script>
    const checkElement = async selector => {
        while ( document.querySelector(selector) === null) {
            await new Promise( resolve =>  requestAnimationFrame(resolve) )
        }
        return document.querySelector(selector); 
    };

    checkElement('.woocommerce-mini-cart__empty-message').then((selector) => {
        
        var message = `
            <div style="margin-top:2rem" class="elementor-button-wrapper">
                <a href="/toilets" class="elementor-button-link elementor-button elementor-size-sm">
                    <span class="class="elementor-button-content-wrapper">
                        <span class="elementor-button-text">View our products</span>
                    </span>
                </a>
            </div>`;
        selector.insertAdjacentHTML('afterend', message);
        console.log(selector);
    });

</script>
<?php } );

有问题的页面是https://staging-woowoowaterlesstoilets.kinsta.cloud/,如果你在没有任何东西的情况下点击篮子,应该会出现一个按钮。它以前可以工作,但在更新了一些插件和 wordpress 之后它就停止了工作。

【问题讨论】:

    标签: javascript wordpress elementor


    【解决方案1】:

    这样会更简单

    const liveSelector = document.getElementsByClassName('woocommerce-mini-cart__empty-message');
    let tId = setInterval(function() {
      if (liveSelector.length > 0) {
        clearInterval(tId)
        var message = `
                <div style="margin-top:2rem" class="elementor-button-wrapper">
                    <a href="/toilets" class="elementor-button-link elementor-button elementor-size-sm">
                        <span class="class="elementor-button-content-wrapper">
                            <span class="elementor-button-text">View our products</span>
                        </span>
                    </a>
                </div>`;
        liveSelector[0].insertAdjacentHTML('afterend', message);
        console.log("done");
      }
    }, 500);
    

    【讨论】:

    • 消除间隔的好方法,感谢就像一个魅力:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 2019-09-30
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 2020-07-18
    相关资源
    最近更新 更多