如何判断元素是否被jQuery包装?

15

如何判断一个对象是否被jQuery包装。

var obj = $('div');

if(obj is a jQuery wrapped object)
{
   then do something
}

我在 JavaScript 的世界里还比较新手。

提前感谢你的帮助。


这有什么用处? - rahul
嗯...它会告诉你正在查看的变量是否是jQuery对象...我认为这是不言自明的..?我学到的一个提示是始终在jQuery对象前缀我的变量,例如:var $obj = $('div');。这真的可以帮助你记住你正在处理什么。 - nickf
5个回答

26

给你:

var isJQuery = obj instanceof jQuery;  // or obj instanceof $;

4
如果有助于问题提出者,$ 只是 jQuery 函数的别名。因此,“obj instanceof $”也可以起作用。 - Paolo Bergantino

2
你可以这样测试:

您可以像这样进行测试:

if(obj instanceof jQuery) {
    // ...
}

不过,说HTML元素被“包裹”在jQuery对象中并不完全正确,相反,jQuery对象是零个或多个HTML元素的集合。因此,如果你真的想小心,可以先测试它是否包含任何元素,如下所示:

if(obj instanceof jQuery && obj.length > 0) {
    var element = obj[0];
    // do something with element
}

这是最好的答案。一个 jQuery 对象可能根本没有包装任何 HTML 元素。由于 obj.size() 现在已被弃用,因此您必须使用 obj.length - Louis Ameline

2
if (obj.jquery) {
    /* Do something */
}

这是最简单的方法。检查对象的构造函数是另一个选择,但请注意它不能在全局上下文中工作(例如,在父页面和帧之间)。


0

如果“element”变量是数组对象或jQuery“类似数组”的对象之一,此检查可以帮助区分它们。

if (jQuery.isArray(element)) {
    // plain array object: []
} else {
    // jQuery wrapped object
}

从jQuery文档中: $.isArray()返回一个布尔值,指示对象是否为JavaScript数组(而不是类似数组的对象,如jQuery对象)。

-2

我不是jQuery的用户,这还没有经过测试等等,但是

if (!(obj instanceof Element))
{
  // ...
}

可能会起作用,除非jQuery在其包装中做了奇怪的事情。当然,这需要您知道obj永远不可能是非jQuery、非DOM元素,但希望这不难强制执行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接