如何使用jQuery延迟对象检查元素是否在DOM中?

5

我想知道是否可以使用jQuery延迟对象来测试元素是否存在于DOM中。

这是我思考的大致方案:

function chkDOM(selector) {
  if $(selector) {
    return deferred.promise();
  }
}

$.when(chkDOM(selector)).then(function() {
  // do something
});

我不太清楚如何编写代码来实现这一点,但我希望我的问题是有意义的。如果我能让这个部分正常工作,那么我就可以延迟调用某些jquery插件,以便它们能够正确运行。

谢谢!


这看起来不对 if $(selector) {... 为什么要使用延迟?你想做什么? - elclanrs
Deferreds 是与响应异步任务的进度和完成有关的,但是我在上述情况中没有感知到任何异步性。 - Beetroot-Beetroot
感谢你的回复。我错过了一个重要的部分,问题是DOM元素被异步注入。非常感谢 "Explosion Pills" 的答案 :-) - tvpmb
3个回答

8
我假设您正在运行一个循环,定期检查选择器是否存在:
var dfd = $.Deferred();
var checkSelector = setInterval(function () {
    if ($("#selector").length) {
        dfd.resolve();
        clearInterval(checkSelector);
    }
}, 1000);

dfd.done(function () {
   console.log('it has been added');
});

注意,不需要使用$.when,您可以直接在延迟对象上使用.done

2
您可以使用以下方法检查元素是否存在。
您不必使用延迟加载。
if( jQuery(selector).length > 0 ) {
    // exists
}

0

要检查DOM中的元素,只需使用

if($(selector).length > 0) {
// do something

}

$(selector) 返回与选择器条件匹配的元素数组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接