jQuery.find()偶尔找不到
jQuery .find() fails to find occasionally
我正试图通过将网页的HTML加载到iframe中来将其解析为DOM,然后在DOM上进行一些搜索。这是代码
function f(callback) {
var tmp = document.createElement('iframe');
$(tmp).hide();
$(tmp).insertAfter($('foo'));
$(tmp).attr('src', url);
$(tmp).load(function() {
var bdy = tmp.contentDocument.body;
callback(bdy);
$(tmp).remove();
});
}
在回调函数中,如果我做了如下
function callback(bdy) {
alert($(bdy).find('bar').length);
}
有时它会给出正确的值,但有时它会给我0。然而,如果我做以下操作,它会起作用
var tmp = document.createElement('iframe');
$(tmp).hide();
$(tmp).insertAfter($('foo'));
$(tmp).attr('src', url);
$(tmp).load(function(tmp) {
setTimeout(function() {
var bdy = tmp.contentDocument.body;
callback(bdy);
$(tmp).remove();
}, '100');
});
由于setTimeout()取决于客户端,我想知道是否有更好的方法来实现同样的目标。谢谢
看看这个问题,以及它的许多答案和相关问题。
更新;以下是一些等待加载#bar
的代码:
function f(callback) {
var tmp = document.createElement('iframe'),
$tmp = $(tmp);
$tmp.hide()
.insertAfter($('foo'))
.attr('src', url);
$tmp.load(function() {
var bdy = tmp.contentDocument.body,
$bdy = $(bdy); // small optimization
var waitForBar = function() {
if($bdy.find('#bar').length > 0) {
callback(bdy);
$tmp.remove();
} else
setTimeout(waitForBar, 50);
};
waitForBar();
});
}
相关文章:
- 气质的“nestRemoting()”有时可以'找不到关系
- 错误405:向Java控制器(Ajax)发送JSON时找不到POST方法
- 找不到模块捆绑包
- for循环中的javascript if语句找不到==
- 为什么JavaScript可以'找不到给定的InnerHTML并返回Cannot set property
- 失败:等待Protractor与页面同步时出错:“”;在窗口上找不到角度”;
- Babel编译错误:找不到模块核心js/library/fn/get迭代器
- [Vue warn]:找不到元素
- ngRoute找不到模板
- 未能加载,因为找不到支持的源.当播放HTML5音频元素时
- 因果报应-找不到模块:错误:无法解析模块'scs'
- Angular 2:在本地.json文件上找不到文件
- module.js在运行iron节点时找不到模块
- 放大弹出生成“;找不到文件”;YouTube视频的错误
- 我发现了一些只在移动设备上可见的垃圾邮件链接,我可以'找不到包含此垃圾邮件链接的脚本的位置
- Web 地址虚拟目录会断开外部 JavaScript 链接,因此找不到文件
- Meteor.js可以'找不到语义:ui包
- 找不到容器:goog.Disposable.instances _在为javascript工具使用泄漏查找器时出错
- 错误:找不到模块'/lib/cli'
- jQuery.find()偶尔找不到