2013-08-02 74 views
0

我有這樣的代碼:querySelectorAll庫

(function (window, document, undefined) { 

    var g = function (sel) { 

    return { 

     selector: document.querySelector(sel), 

     on: function (evt, fn) { 
     if (this.selector) this.selector.addEventListener(evt, fn, false); 
     return this; 
     } 
    }; 
    }; 

    window.g = window._ = g; 

})(this, document); 

如何使用querySelectorAll代替querySelector在這種情況下,這樣我可以選擇多個元素。特別考慮到將會有多種方法,如on。我如何遍歷所有元素並將它們返回到它調用的方法。

回答

1
selector: document.querySelectorAll(sel), 
on: function (evt, fn) { 
    if (this.selector) { 
     for (var i=0, len=this.selector.length; i < len; i++) 
      this.selector[i].addEventListener(evt, fn, false); 
    return this; 
} 

如果你不得不重新使用該循環的方法很多,只要創建一個包裝,像

selector: document.querySelectorAll(sel), 
forEach: function (codeToApply) { 
    for (var i=0, len=this.selector.length; i < len; i++) 
      codeToApply.call(this, this.selector[i]); 
}, 
on: function (evt, fn) { 
    if (this.selector) { 
     this.forEach(function (element) { 
      element.addEventListener(evt, fn, false); 
     } 
    return this; 
} 
+0

好東西!我希望我不必在每種方法中都創建一個循環。是否有另一種方法在一個地方創建一個循環來調用每個元素的方法? – georgesamper

+0

這取決於你在其他方法中做什麼。我建議的方式是允許您使用選擇器節點運行任意操作的最通用方法。 如果您在所有方法中都有特定的模式,可以使用它來優化包裝器代碼。 – amakhrov

+0

好的!感謝您的信息和例子。 – georgesamper

相關問題