给定一个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属性将永远是一个非负整数,因此可以检查该值的真实性。