2014-02-25 38 views
2

我正在構建一個非常小的庫/框架,作爲理解jQuery及其核心工作方式的一部分。jQuery選擇器元素如何也是jQuery對象

我想知道如何將jQuery選擇器元素作爲jQuery對象返回並具有jQuery的所有方法。例如:

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

的$(本)是參照jQuery對象爲DOM元素<利>並且具有的jQuery的所有方法。

日誌顯示這一點:

[li, context: li, jquery: "2.1.0", constructor: function, selector: "", toArray: function…] 0: li context: li length: 1 __proto__: Object[0]

這裏是說明我如何處理的初始化和each方法的lib的一小部分。

(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從原型返回一個方法。基本上沒有$的原型,因爲$是沒有實例化的函數/對象的引用。

+0

'callback(i,$(stack [i]));'? –

回答

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

我怎麼沒有想到這個......謝謝!還有關於側面問題的任何想法?或者我應該把它作爲單獨的問題發佈 –