JQuery插件的每个元素的独立范围

时间:2016-09-29 13:15:32

标签: javascript jquery html

我正在开发一个carousel 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(&#34; abc&#34;)。

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

1 个答案:

答案 0 :(得分:1)

将元素的查找范围扩展到应用插件的当前元素。

使用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. 
  });
  ...
});

```