【发布时间】:2011-03-25 03:37:19
【问题描述】:
给定一个 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 是否可见。
【问题讨论】:
-
$j 可能有父母,但不在您知道的文档中...
-
另一个可能的测试:
$j.closest('body').size()>0 -
@drachenstern:说得好。提出问题最好的部分是让某人指出明显的问题。同样的问题大概也适用于索引方法,因为他们正在检查类似的事情。
-
@Michael:在某些病理情况下,这种“超级父母”方法可能会遇到与仅检查
$j.parent().length相同的问题,不是吗? OTOH,如果有人试图将身体放入身体中,他们可能应该受到一些痛苦。 -
天哪,mu 问了第二个问题! :p