缓存的jquery对象是否

缓存的jquery对象是否

有谁知道如何判断一个缓存的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/

10-12 07:12