这可能是一个愚蠢的问题,但有没有办法以编程方式告诉对象是jquery还是只是简单的javascript?
例如:
Utils.Listbox.MoveItemsUp = function(listbox) {
if(listbox.isJquery()) {
listbox.each(function(){});
}
else {
for(var i = 0; i < listbox.options.length; i++){}
}
};
答案 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>