如何知道你是否有一个jQuery对象

时间:2010-10-15 11:07:01

标签: jquery

真的有两个问题......

首先,当编写带有对象参数的jQuery函数时,哪个是更好的编码风格,该函数是应该使用jQuery对象还是更好地传递标准JavaScript对象并让函数本身进行包装?我想我只是在问这里是否有标准,因为对于想要调用该函数的人来说,这可能并不总是显而易见。

其次,如何测试对象是否是jQuery对象?理想情况下,如果函数可以采用其中任何一个会很好,所以......

function(obj) {
    var $obj;
    if (isJQuery(obj)) {
        $obj = obj;
    }
    else {
        $obj = $(obj);
    }
    // ....
}
或者你甚至需要这样做吗?如果对象已经是一个jQuery对象,那么$(obj)会简单地返回,所以你总是可以尝试换行,这无关紧要吗?

2 个答案:

答案 0 :(得分:8)

您可以测试.jquery property(在jQuery对象的原型上),如下所示:

function(obj) {
  var $obj = obj.jquery ? obj : $(obj);
}

这就是jQuery core does internally as well


更新: My ticket filed as a result of this question已完成,您现在可以找到the .jquery property in the official API documentation


编辑:,因为@ T.J.在评论中指出此目前不是 the official APIit's been around since jQuery 1.0并且我很确定它不会去任何地方。所有相同的评论讨论(感谢TJ),我提交了一个增强票据,希望将其添加到API文档中,您可以跟踪它的进度在这里:http://bugs.jquery.com/ticket/7200

答案 1 :(得分:4)

我会按照这些思路思考:

    if (obj instanceof jQuery) {
        $obj = obj;
    }
    else {
        $obj = $(obj);
    }
  如果对象已经是jQuery对象,

$(obj)简单地返回,所以你总是可以尝试换行并且它无关紧要?

好吧,它会返回您传递的jQuery对象的 clone (请参阅documentation)。这可能会导致意外行为。