Jquery 除非第一次提醒,否则单击后找不到任何元素

Jquery finds no elements after click unless first alert

我正在尝试使用 Firefox 浏览器控制台 select i 框架中的元素。 i 帧显示在一个模式对话框中,当我单击 link.

时打开该对话框

下面的示例代码执行以下操作:

  1. 单击打开模式对话框的页面上的第一个 link
  2. 显示警报
  3. 关闭警报后,代码会找到所有具有 class
  4. 的跨度元素
  5. 代码然后打印找到的跨度元素数。

此代码适用于此 link: https://www.sec.gov/edgar/search/#/q=%2522food%2520and%2520drug%2522

$('.preview-file').eq(1).trigger('click');
alert("close this alert");
previewFrame = $('#ipreviewer');
all = $(previewFrame).contents().find(".sect-efts-search-match-khjdickkwg");
console.log($(all).length);

但是,当我取出 alert("close this alert") 时,代码不再有效。如果没有警报,代码将找不到任何跨度元素并向控制台打印 0

无效代码(returns 0):

$('.preview-file').eq(1).trigger('click');
previewFrame = $('#ipreviewer');
all = $(previewFrame).contents().find(".sect-efts-search-match-khjdickkwg");
console.log($(all).length);

为什么在没有警报的情况下此代码不起作用?我该如何解决这个问题?

编辑: 我尝试了一个 while 循环,看看我是否必须等待加载某些东西,但它也没有用(永无止境的循环)。

$('.preview-file').eq(i).trigger('click');
previewFrame = $('#ipreviewer');
all = $(previewFrame).contents().find(".sect-efts-search-match-khjdickkwg");
console.log($(all).length);
while($(all).length < 1){
    previewFrame = $('#ipreviewer');
  all = $(previewFrame).contents().find(".sect-efts-search-match-khjdickkwg");
  console.log($(all).length);
  
}

初始页面加载时 iframe 不存在

您可以使用以下方法,它使用 setInterval() 检查 iframe 和 iframe 内的项目是否存在,对我来说返回找到的四个项目的计数

const timer = setInterval(function(){
  const $frme=$('#ipreviewer');
  // check if frame exists
  if($('#ipreviewer').length){
    const $items = $frme.contents().find(".sect-efts-search-match-khjdickkwg");
    // check if items found
    if($items.length){
      // do something with the items
      console.log('Found ', $items.length, ' items');
      // clear interval timer when found
      clearInterval(timer)
    }
  }else{
    console.log('Not found')
  }
},100)// 1/10th second intervals

$('.preview-file').eq(1).trigger('click');