【发布时间】:2014-02-25 10:04:31
【问题描述】:
我正在构建一个非常小的库/框架,作为我了解 jQuery 及其核心工作原理的旅程的一部分。
我想知道 jQuery 选择器元素如何也作为 jQuery 对象返回并具有 jQuery 的所有方法。例如:
$('ul li').each(function(){
console.log($(this));
})
$(this) 是对 DOM 元素 的 jQuery 对象的引用,具有 jQuery 的所有方法。
日志显示:
[li, context: li, jquery: "2.1.0", constructor: function, selector: "", toArray: function…]
0: li
context: li
length: 1
__proto__: Object[0]
这是 lib 的一小部分,说明了我如何处理初始化和 each 方法。
(function( global, factory ) {factory( global );}
(window, function( window ) {
var document = window.document;
var LibInit = function( selector ) {
return new Lib( selector );
};
function Lib ( selector ) {
this.selector = selector;
return this;
}
Lib.prototype = {
each: function(stack, callback) {
var i;
for ( i in stack ) {
if ( typeof stack[i] === 'object' )
callback(i, stack[i]);
}
return this;
}
}
window.Lib = LibInit;
}
));
Lib().each(document.querySelectorAll('ul li'), function(i,v){
console.log(v);
})
这个 Lib 每个都返回特定元素的直接 DOM 对象。 如何更改它以返回用 Lib 对象包装的 DOM 对象。
对于复杂的解释我很抱歉,只是想不出更好的解释方式。
也是一个附带问题。 $/jQuery 的 console.log 如何为 init 函数返回字符串,而 $.plugin 如何从原型返回一个方法。基本上没有 $ 的原型,因为 $ 是对未实例化的函数/对象的引用。
【问题讨论】:
-
callback(i, $(stack[i]));??
标签: javascript jquery dom