Javascript 了解插件代码中$内传递的参数的用法。

Javascript 了解插件代码中$内传递的参数的用法。,javascript,jquery,Javascript,Jquery,我是Jquery新手,刚刚学习了一些新东西,刚刚阅读了chris coyers的文章,发现了以下代码: $.fn.faq = function(options) { return this.each(function(i, el) { var base = el, $base = $(el); console.log(options); base.init = function() { //

我是Jquery新手,刚刚学习了一些新东西,刚刚阅读了chris coyers的文章,发现了以下代码:

$.fn.faq = function(options) {

    return this.each(function(i, el) {

      var base = el,
              $base = $(el);

          console.log(options);

      base.init = function() {
        // Do initialization stuff
            $base
               .find("dd")
               .hide()
               .end()
               .find("dt")
               .click(function() {

                 var ans = $(this).next();

                 if (ans.is(":visible")) {
                   base.closeQ(ans); 
                 } else {
                   base.openQ(ans); 
                 }

               })
      };

      base.openQ = function(ans) {
        // Open panel
                ans.show();

        // Do callback
        options.qOpen.call();
      };

      base.closeQ = function(ans) {
        // Open panel
                ans.hide();

        // Do callback
        options.qClose.call();
      };

      base.init();

    });

};

$("dl").faq({
  qOpen: myQuestionOpenCallback,
  qClose: myQuestionCloseCallback
});

function myQuestionOpenCallback() {
  alert("answer opened!");
}

function myQuestionCloseCallback() {
  alert("answer closed!");
}
现在我不太理解这部分代码(请看下面):

代码中的第二行,
i
el
到底是什么??我没有看到这些参数被传递到each函数的任何地方

我问了我的一位同事,得到了以下答案

很多插件都是这样开始的。因为大多数插件都是可链接的,所以它们 我必须归还这个。它们还必须在元素之间循环 从选择器

return this.each(function(i, el) { 
两者都有。一个循环,然后返回

但我还是不太明白

可以找到Jsbin小提琴

多谢各位

亚历山大

  • i:元素的索引
  • el:DOM元素(不是jQuery对象)

在jQuery插件中,
这个
指的是jQuery对象,表示您在其上调用的插件。例如,在这个
faq
插件的情况下,如果我调用
$('#someDiv').faq({…})
将与插件函数中的
$(“#someDiv”)
相同

因此,由于它是一个表示DOM节点选择的jQuery对象,因此您可以在其上调用jQuery方法
.each()
,该方法在为选择中的每个DOM节点调用该方法时,将获取给定的两个参数:

  • 索引(0、1、2等)
  • DOM节点本身

  • .each()
    还返回调用它的对象,因此您最终从插件返回
    $('#someDiv')
    对象。这很好,因为这样我们就可以直接调用其他jQuery方法(“链接”)。e、 g.
    $('#someDiv').faq({…}).hide()以立即隐藏它。

    请参阅
    i
    el
    通过jQuery传递。这意味着
    el
    在这种情况下表示每个选中的
    ?请这样想,如果我的页面上有两个
    并且我调用
    $('.my class').faq()
    ,那么您正在谈论的函数将被调用两次。第一次
    i
    将是
    0
    el
    将是第一个div的DOM节点。第二次
    i
    将是
    1
    el
    将是第二个div的DOM节点。谢谢@GregL,非常好的解释。
    return this.each(function(i, el) {