如何正确拆分这两个 Jquery 函数?

how do i split these two Jquery functions properly?

我想做的是,给定以下脚本:

 (function($) {
  $.fn.Button_Activator = function() {
        return this.each(function() {
          var coll = document.getElementsByClassName("collapsible");
          var i;
          for (i = 0; i < coll.length; i++) {
              coll[i].addEventListener("click", function() {
              this.classList.toggle("active");
              var content = this.nextElementSibling;
              if (content.style.maxHeight){
                content.style.maxHeight = null;
              } else {
                content.style.maxHeight = content.scrollHeight + "px";
              }
            });
          }
        });
    };
})(jQuery); // End of use strict

我试图将它拆分为两个单独文件中的两个函数,第一个是:“little_one.js”

(function ($) {
    $.fn.little_one = function (test) {
        return this.each(function (test) {
            this.classList.toggle("active");
            var content = this.nextElementSibling;
            if (content.style.maxHeight) {
                content.style.maxHeight = null;
            } else {
                content.style.maxHeight = content.scrollHeight + "px";
            };
        });
    };
    
})(jQuery); // End of use strict

第二个是“Button_Activator.js”:

(function ($) {
    $.fn.Button_Activator = function () {
        return this.each(function () {
            var coll = document.getElementsByClassName("collapsible");
            var i;
            for (i = 0; i < coll.length; i++) {
                coll[i].addEventListener("click", little_one(coll[i]));
            }
        });
    };
})(jQuery); // End of use strict

现在,当我使用以前的函数时,浏览器会显示“未捕获的引用错误:little_one 未定义”以及“jquery.min.js:2 jQuery.Deferred 异常” : little_one 未定义 ReferenceError: little_one 未定义”。 现在,在 HTML 中我已经验证它在 Button_Activator.js 之前导入 little_one.js 因此我最好的猜测是拆分的实现有问题。任何对此事有任何意见的人都会非常感激。

我发现代码片段存在一些问题,

  1. little_one 存在于 jquery $ 对象上,因此您需要引用
coll[i].addEventListener("click", $().little_one(coll[i]));
  1. addEventListener 需要一个函数引用作为它的第二个参数,但你实际做的是立即调用函数并返回结果,所以你需要传递函数引用
coll[i].addEventListener("click", $().little_one);
  1. this.each 存在于 jQuery 元素中,而不存在于 DOM 元素中,通常我建议不要将 DOM 元素与 jQuery 元素混合,因为很难知道哪个是哪个。
(function ($) {
    $.fn.little_one = function () {
        this.classList.toggle("active");
        var content = this.nextElementSibling;
        if (content.style.maxHeight) {
            content.style.maxHeight = null;
        } else {
            content.style.maxHeight = content.scrollHeight + "px";
        };
    };
})(jQuery); // End of use strict

工作 jsFiddle:http://jsfiddle.net/76yumo4n/