检测jQuery对象是否在页面上
给定一个jQuery对象,检测jQuery对象是否在页面上,jquery,dom,Jquery,Dom,给定一个jQuery对象,$j,我需要知道它代表的是已经在页面上的内容,还是还没有放到页面上的内容。例如,如果我有: $j = $('#id-of-something-already-on-the-page'); $j = $("<p>I'll cook you some eggs, Margie.</p>"); 或 $j=$(“煎饼屋在哪里?”)。附录($(“#这已经在那里”); 然后我有一些东西在页面上,我不需要把它放在页面上。但是,如果我有这个: $j = $
$j
,我需要知道它代表的是已经在页面上的内容,还是还没有放到页面上的内容。例如,如果我有:
$j = $('#id-of-something-already-on-the-page');
$j = $("<p>I'll cook you some eggs, Margie.</p>");
或
$j=$(“煎饼屋在哪里?”)。附录($(“#这已经在那里”);
然后我有一些东西在页面上,我不需要把它放在页面上。但是,如果我有这个:
$j = $('#id-of-something-already-on-the-page');
$j = $("<p>I'll cook you some eggs, Margie.</p>");
$j=$(“我给你煮些鸡蛋,玛吉。”);
然后我需要在它出现在页面上之前添加它
问题是你如何询问$j是否在页面上?我非常了解两种工作方式:
$j.parent().length>0
表示它在页面上$j.index()>-1
表示它在页面上$j
是html
或者可能是body
,我可以看到第一个失败;我很高兴忽略这两个病理病例。我想不出第二种方法会失败
是否有一种标准的技术来询问jQuery对象是否在页面上?我不在乎
$j
是否可见。jQuery对象表示html元素的集合
选择后:$j=$(“#页面上已有内容的id”)
你所要做的就是检查$j.length。如果是一个,则页面上有一个项目。我可能只是检查元素是否可以到达body元素:
$j.closest('body').size()>0
正如您在其他评论中所指出的,在处理额外的主体元素的一些特殊情况下,这将失败。如果您真的想检测这些情况,我想您可以检查是否有多个$(body
)元素,但我怀疑这种极端情况会很快失控
此“可能已附加到页面”检查也可以提交到:
就我个人而言,我会从您知道的页面中的元素开始,比如
或
,然后使用:
这甚至适用于你提到的两个病理病例。检查.length
而不是.size()
。也没有理由检查返回的值是否为>0
。length
属性将始终是一个非负整数,因此检查值的真实性就足够了。使用jQuery(至少在1.7.1版中)$('html')。parent()
返回一个非空数组([#document]
):
$j=$(“我给你煮些鸡蛋,玛吉。”);
$j.parent().length==0
$('html').parent().length==1
$('body').parent().length==1
因此,“mu太短”的注释不是问题:
如果$j是html或者可能是body,我可以看到第一个失败;我很高兴忽略这两个病理病例。我想不出第二种方法会失败
$j可能有一个父项,而不在您知道的文档中……另一个可能的测试:
$j.closest('body').size()>0
@drachensten:很好。提问最好的部分是让某人指出明显的问题。同样的问题可能也适用于索引方法,因为他们正在检查类似的东西。@Michael:“超级家长”方法可能会遇到与在某些病理情况下只检查$j.parent().length
相同的问题,不是吗?奥托,如果有人想把一具尸体放进一具尸体里,他们可能会受到一些痛苦。哦,我的上帝,穆问了第二个问题!:不是真的。如果我分离节点并将其存储在变量中,它仍然作为变量存在。如果我稍后测试该变量,看看是否有代码将其重新插入DOM(考虑:每次传递引用而不是对其进行重新筛选,并使用分支语句执行各种操作,如分离或包装),那么它可能在DOM中,也可能不在DOM中。如果在编写函数时将引用传递给节点,则无法始终知道id是什么。还有:上下文查询。或者如果我有$j=$(“我会给你煮一些鸡蛋,玛吉。”)
那么$j.length==1
但是在我$('body')之前,段落不会出现在页面上。附加($j)
(或类似的东西)我以前使用过$.expr
,但现在我只需要在一个地方使用它,所以我不认为我需要这样的想法。然而,@Michael@mu为什么不closest('html')
?当你可以只使用.length
时,为什么要使用.size()>0
@马特:我用.length
,我想我从来没有用过.size()。然而,它可能不值得额外的击键,特别是当大多数javascript程序员没有它就会理解它的意义时。我有一点担心这在大页面上的重量。但是+1,肯定是火。
if ($('html').has($j).length)
{
// $j is in the page
}
$j = $("<p>I'll cook you some eggs, Margie.</p>");
$j.parent().length === 0
$('html').parent().length === 1
$('body').parent().length === 1