如何判断obj是jquery还是普通的javascript

时间:2011-05-06 13:22:27

标签: javascript jquery

这可能是一个愚蠢的问题,但有没有办法以编程方式告诉对象是jquery还是只是简单的javascript?

例如:

Utils.Listbox.MoveItemsUp = function(listbox) {

    if(listbox.isJquery()) {
        listbox.each(function(){}); 
    }
    else {
        for(var i = 0; i < listbox.options.length; i++){}
    }
};

5 个答案:

答案 0 :(得分:8)

jQuery对象有一个名为'jquery'的属性:

>>> $('body').jquery
"1.5.2"

答案 1 :(得分:1)

jQuery 只是Javascript。我猜你可以测试一下jQuery函数的存在:

if (foo.each)
{
    foo.each(function(...
}
else
{
    $(foo).each(function(...
}

答案 2 :(得分:1)

一种方法是使用jQuerys $.isPlainObject函数(doc)这将告诉您它是使用{}还是new Object创建的对象,jQuery对象将返回假。但是,请注意,数组,字符串和函数也将返回false:

var obj = {};
var $obj = $('div');

$.isPlainObject(obj); //returns true
$.isPlainObject($obj); //returns false

答案 3 :(得分:0)

你应该记住的是,无论何时你在回调中,对象this总是一个本机实体,而不是一个jquery对象。

例如:

a = $('a').each(function(){
    //'this' is ALWAYS an native object
});

a将始终是jQuery的一个实例,除非您使用返回类型的特定方法,如json对象,布尔值,字符串等。

如果您从一个不受控制的函数中复活变量并且您想知道它是否是jQuery对象,则可以执行以下操作:

if(!listbox || !listbox.jquery)
{
     listbox = $(listbox)
}
//the variable is now always going to be a jQuery object.

原因是jquery总是在选定的上下文中存储对其版本的引用

答案 4 :(得分:0)

要测试对象是否是jQuery对象,请检查它的jquery属性。这样:

<script>
Utils.Listbox.isJquery = function()
{
    return typeof this.jquery != 'undefined';
}
</script>