jQuery选择器元素如何也是jQuery对象

时间:2014-02-25 10:04:31

标签: javascript jquery dom

我正在构建一个非常小的库/框架,作为我理解jQuery及其核心工作原理的一部分。

我想知道如何将jQuery选择器元素作为jQuery对象返回并拥有jQuery的所有方法。例如:

$('ul li').each(function(){ console.log($(this)); })

$(this)是对DOM元素< li> 的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从原型返回一个方法。基本上没有$的原型,因为$是对未实例化的函数/对象的引用。

1 个答案:

答案 0 :(得分:1)

 for ( i in stack ) {
     if ( typeof stack[i] === 'object' )
         callback(i, new Lib(stack[i]));
     }
 }