给定一个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 次 |
最近记录: |