检查样式,然后使用jQuery插入元素一次

检查样式,然后使用jQuery插入元素一次,jquery,Jquery,我正在尝试编辑一个插件生成的弹出窗口,因此我对HTML文件的访问权限有限,无法进行编辑。因此,我尝试使用jQuery 基本上,一旦弹出窗口的样式更改为显示,我想向弹出窗口本身添加文本。我目前的设置方式是这样的,基于给出的答案 函数更改(){ if($('.bold_lightbox').css('display')=='block'){ console.log('显示lightbox'); $(“定价信息在此处显示)”).insertAfter(“.bold\u option\u set”);

我正在尝试编辑一个插件生成的弹出窗口,因此我对HTML文件的访问权限有限,无法进行编辑。因此,我尝试使用jQuery

基本上,一旦弹出窗口的样式更改为显示,我想向弹出窗口本身添加文本。我目前的设置方式是这样的,基于给出的答案

函数更改(){
if($('.bold_lightbox').css('display')=='block'){
console.log('显示lightbox');
$(“定价信息在此处显示)

”).insertAfter(“.bold\u option\u set”); }否则{ console.log('lightbox不可见'); } 设置超时(更改,1000); } 设置超时(更改,1000);
这可以工作,并成功地将文本添加到弹出窗口中。但是,它每秒钟都会继续检查一次,这反过来又会一次又一次地复制段落,直到弹出窗口关闭为止


我希望在添加一次段落后,能够停止添加该段落。

可以使用标志检查文本是否已添加,如下所示:

var done=false;
function change() {
    if ($('.bold_lightbox').css('display') == 'block') {
        console.log('lightbox is shown');
        $('<p>Pricing Information Goes Here</p>').insertAfter('.bold_option_set');
        done = true;
    } else {
        console.log('lightbox is not visible');
    }
    if(!done)
        setTimeout(change, 1000);
}
setTimeout(change, 1000);
var done=false;
函数更改(){
if($('.bold_lightbox').css('display')=='block'){
console.log('显示lightbox');
$(“定价信息在此处显示)

”).insertAfter(“.bold\u option\u set”); 完成=正确; }否则{ console.log('lightbox不可见'); } 如果(!完成) 设置超时(更改,1000); } 设置超时(更改,1000);

太好了,对我来说很有效。有一个问题是,有没有办法调整它,使重新打开弹出窗口再次开始这个过程?@SamJohnson肯定弹出窗口有类似onclose或ondestroy事件的东西。它可能取决于您在何处声明此函数,但您可以声明
var done=false在某个地方,你可以在这里和事件处理程序内部使用它,在那里你可以将它重置为false,这样下次弹出窗口再次显示时,变量就准备好了,明白了吗?恐怕我不太清楚你的意思。也许我使用的“弹出”是不正确的。它基本上是一个用CSS显示和隐藏的div。@SamJohnson在发布问题时尽量包含所有相关信息/代码。好吧,如果你只是在创建和操作一个div,那么应该会更容易,因为你可以完全控制它,现在你所要做的就是
done=false在你隐藏div的位置/时间内,试试看,对不起,我肯定不清楚。因此,在单击按钮显示弹出div之前,弹出div实际上并不存在。这一切都是通过第三方Shopify插件完成的,所以我实际上无法访问执行此操作的代码。因此,我不认为我可以添加
done=false在它里面。
var done=false;
function change() {
    if ($('.bold_lightbox').css('display') == 'block') {
        console.log('lightbox is shown');
        $('<p>Pricing Information Goes Here</p>').insertAfter('.bold_option_set');
        done = true;
    } else {
        console.log('lightbox is not visible');
    }
    if(!done)
        setTimeout(change, 1000);
}
setTimeout(change, 1000);