Jquery 除非第一次提醒,否则单击后找不到任何元素
Jquery finds no elements after click unless first alert
我正在尝试使用 Firefox 浏览器控制台 select i 框架中的元素。 i 帧显示在一个模式对话框中,当我单击 link.
时打开该对话框
下面的示例代码执行以下操作:
- 单击打开模式对话框的页面上的第一个 link
- 显示警报
- 关闭警报后,代码会找到所有具有 class
的跨度元素
- 代码然后打印找到的跨度元素数。
此代码适用于此 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');
我正在尝试使用 Firefox 浏览器控制台 select i 框架中的元素。 i 帧显示在一个模式对话框中,当我单击 link.
时打开该对话框下面的示例代码执行以下操作:
- 单击打开模式对话框的页面上的第一个 link
- 显示警报
- 关闭警报后,代码会找到所有具有 class 的跨度元素
- 代码然后打印找到的跨度元素数。
此代码适用于此 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');