当您向 jQuery 传递 DOM 对象时,jQuery 会返回以 HTML DOM 对象包装的 jQuery 对象。 jQuery 函数会返回新的 jQuery 对象,其中的 ready() 是一个方法。提示:jQuery 返回 jQuery 对象,与已传递的 DOM 对象不同。jQuery 对象拥有的属性和方法,与 DOM 对象的不同。您不能在 jQuery 对象上使用 HTML DOM 的属性和方法。
一、.click , .bind , .on 的区别
1、.click 为元素绑定click事件;
2、.bind 为元素绑定特定事件(如:click),可同时绑定多个事件;绑定单个事件时(如:click),其简写同(.click);
但不可以为还不存在的元素绑定事件;对应方法:unbind
3、.on 为元素绑定特定事件(如:click) , 可为其子元素同时绑定事件;可为不存在后来又通过JS动态加入的元素绑定事件。
对应方法: off
二、jQuery.proxy - 绑定 this
Function.prototype.bind = function (obj) { return $.proxy(this, obj); }
三、jQuery函数的返回值
jQuery = function(selector, context) { // The jQuery object is actually just the init constructor 'enhanced' // Need init if jQuery is called (just allow error to be thrown if not included) return new jQuery.fn.init(selector, context);}
init = jQuery.fn.init = function(selector, context) {}
init.prototype = jQuery.fn
看上面这三段代码,可以了解$(...)返回的是一个 jQuery.fn.init 对象,jQuery.fn.init 是一个构造函数,其原型就是 jQuery.fn。
再看看 jQuery.fn 的定义(精简代码)
jQuery.fn = jQuery.prototype = { jquery: version, constructor: jQuery, // The default length of a jQuery object is 0 length: 0, toArray: function() {}, each: function(callback, args) {}, map: function(callback) {}, slice: function() {}, // For internal use only. // Behaves like an Array's method, not like a jQuery method. push: push,};
可以看到这是一个类似数组的对象,所以 $(...) 得到的是一个类数组对象,而不是真正的数组,用 Array.isArray 很容易检查出来。
它作为原型,提供了 each 和 map 等方法。
如果要把它变成真正的数组,需要调用其 toArray() 方法。
jquery返回的不是该元素本身,比如:$("#postFeedback")[0],才是该元素本身