繁体   English   中英

JQuery 插件对每个元素的单独作用域

[英]JQuery Plugin's Separate Scope for Each Element

我正在开发一个轮播 jquery 插件。 我正在尝试使用多个轮播 div 元素进行调用,例如

<div class="carousel-container">...</div>
<div class="carousel-container2">...</div>
...

我在哪里调用插件

$(".carousel-container").mycarousel({
  // Properties
});

$(".carousel-container2").mycarousel({
  // Properties
});

插件代码:

(function($) {
   $.fn.mycarousel = function(options) {
      var settings = $.extend({
        indicators : true,
        autoplay : true,
        autoplayDir : "forward",
        slidesToShow : 1,
        slidesToScroll : 1
    }, options);

    return this.each(function() {
      // JavaScript code like constructor function and its prototypes

      // variable declarations and initialization
      var outerCarouseWidth, imageWidth;
      var elements, carousel;
      ...

      // jquery code for selectors, events etc.
      var carouselInner = $(".carousel-inner");
      var carouselOuter = $(".carousel-outer");
      ...

      $(".next-link").on("click", function(e) {
            slide("next", "first");
      });
      ...
    });
   };
}(jQuery));

好吧,现在我正在尝试在每个函数中使用 $(this) 访问子元素。 像 $(this).children()[0].text("abc")。

我在这里面临的问题是,两个轮播 div 元素共享变量、选择器等的范围。当我滑动一个轮播时,其他轮播也会移动并面临其他一些技术问题。 如何为我调用此插件的每个元素分隔 jquery 插件的代码范围?

将元素的发现范围限定为应用插件的当前元素。

使用 carouselEl 作为所有子元素的父选择器。

像这样:

``

return this.each(function() {
  var carouselEl = $(this);
  ...

  // jquery code for selectors, events etc.
  var carouselInner = carouselEl.find(".carousel-inner");
  var carouselOuter = carouselEl.find(".carousel-outer");
  ...

  carouselEl.find(".next-link").on("click", function(e) {

        slide(carouselEl, "next", "first"); // This must also be scoped.. I cant see the code for this function. 
  });
  ...
});

``

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM