有谁知道如何判断一个缓存的jQuery对象是否过时,例如不再在DOM中了?例如:
var $cached_elem = $('.the_button');
// .. and then later
$cached_elem.text('updating...');
我最近遇到了由于某些其他事件而从DOM中删除$ cached_elem的情况。所以我想做的是:
if ( $cache_elem.isStillInDOM() ){
// now do time consuming stuff with $cached_elem in DOM
}
在提供任何报价之前,我已经使用了此功能,这与我尝试执行的操作很相似:
if ( $cached_elem.is(':visible') === true ){ ... }
但是,这并不是一回事,在某些情况下可能会失败。
因此,谁能想到一种直接检查缓存的jQuery对象是否“陈旧”的简单方法?如果没有,我可能会被迫编写一个插件...
最佳答案
if($elem.closest('body').length > 0)
似乎可以解决问题。
$(function() {
var $button = $(".the_button");
alert (isStale($button));
$button.remove();
alert (isStale($button));
});
function isStale($elem)
{
return $elem.closest("body").length > 0;
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<span class="the_button">Hello World</span>
</div>
编辑:已更新,以回应Yi Jiang的评论,以便如果删除其父元素,它将正确返回
编辑2:已更新,以响应lonesomeday的评论-将
parents()
更改为“closest()”以提高性能关于javascript - 检查缓存的jquery对象是否仍在DOM中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4040715/