检测jQuery对象是否在页面上

给定一个jQuery对象$ j,我需要知道它是否代表页面上已经存在的东西,或者是否还没有放在页面上。例如,如果我有这个:
$j = $('#id-of-something-already-on-the-page');

要么

$j = $('<p>Where is pancake house?</p>').appendTo($('#this-is-already-there'));

然后我在页面上有一些东西,我不需要把它放在页面上。但是,如果我只是这样做:

$j = $("<p>I'll cook you some eggs,Margie.</p>");

然后我需要在页面之前附加它。

问题是你如何询问$ j是否在页面上?我认识了两种工作方式:

>看看它是否有一个父项:$ j.parent()。length> 0表示它在页面上。
>看看它是否有一个有效的索引:$ j.index()> -1表示它在页面上。

如果$ j是html或可能的body,我可以看到第一个失败我很高兴忽视这两个病理病例。我不能想到第二种方法会失败的任何方式。

有没有一个标准的技术来询问jQuery对象是否在页面上?我不在乎$ j是否可见。

解决方法

就个人而言,我首先从你知道的元素在页面中下降,如< html>或< body>,并使用 .has()
if ($('html').has($j).length)
{
    // $j is in the page
}

即使对于您提到的两个病理情况,这也是可行的。检查.length而不是.size()是more idiomatic。还没有理由检查返回的值是> 0. length属性将永远是一个非负整数,因此可以检查该值的真实性。

相关文章

jQuery插件的种类 1、封装对象方法 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进...
扩展jQuery插件和方法的作用是非常强大的,它可以节省大量开发时间。 入门 编写一个jQuery插件开始于给...
最近项目中需要实现3D图片层叠旋转木马切换的效果,于是用到了jquery.roundabout.js。 兼容性如图: ht...
一、什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异...
AMD 模块 AMD(异步模块定义,Asynchronous Module Definition)格式总体的目标是为现在的开发者提供一...