2013-08-02 48 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

相关问题