给定一个jQuery对象,$j我需要知道它是否表示已经在页面上的内容,或者它是否是尚未放在页面上的内容.例如,如果我有这个:
$j = $('#id-of-something-already-on-the-page');
Run Code Online (Sandbox Code Playgroud)
要么
$j = $('<p>Where is pancake house?</p>').appendTo($('#this-is-already-there'));
Run Code Online (Sandbox Code Playgroud)
然后我在页面上有一些东西,我不需要把它放在页面上.但是,如果我有这个:
$j = $("<p>I'll cook you some eggs, Margie.</p>");
Run Code Online (Sandbox Code Playgroud)
然后我需要在它出现在页面之前附加它.
问题是你如何询问$j它是否在页面上?我知道两种方式工作得很好:
$j.parent().length > 0暗示它在页面上.$j.index() > -1暗示它在页面上.我可以看到第一个失败,如果$j是html或可能的body; 我很高兴忽略这两个病理案例.我想不出第二种方法会失败的方式.
是否有一种标准技术来询问页面上是否有jQuery对象?我不在乎是否$j可见.
Mat*_*all 31
就个人而言,我首先从你知道的在页面中的元素开始,<html>或者<body>,然后使用.has():
if ($('html').has($j).length)
{
// $j is in the page
}
Run Code Online (Sandbox Code Playgroud)
这甚至适用于您提到的两个病理情况.这是更地道检查.length,而不是.size().也没有理由检查返回的值是什么> 0.该length属性将始终为非负整数,因此检查值的真实性就足够了.
我可能只是检查元素是否可以到达body元素:
$j.closest('body').size()>0
Run Code Online (Sandbox Code Playgroud)
正如您在其他评论中指出的那样,在处理额外的body元素的一些特殊情况下,这会失败.如果你真的想要检测这些情况,我猜你可以查看你是否有多个$(body)元素,但我怀疑这种极端情况会很快失控.
这个"可能是附加到页面"的检查也可以转换为真正的jQuery选择器:
$.expr[':'].isProbablyAttached = function(obj){
return $(obj).closest('body').size()>0;
};
// Usage:
$('.someClasses:isProbablyAttached').doSomething();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4120 次 |
| 最近记录: |