jQuery插件帮助。。影响所有项目,而不是一个项目

jQuery插件帮助。。影响所有项目,而不是一个项目,jquery,jquery-plugins,Jquery,Jquery Plugins,正如它在标题中所说,一个小的基本插件有问题。正如您在下面的示例中所看到的,有两个div包含图像。单击其中一个下方的黑框时,它会隐藏两个div,而不是它所在的div。为什么会这样?怎么能修好呢 例如: 代码示例: (function($){ $.fn.extend({ premiumSlider: function(options) { var defaults = { width: 520, // Set width height: 340, // Set height

正如它在标题中所说,一个小的基本插件有问题。正如您在下面的示例中所看到的,有两个div包含图像。单击其中一个下方的黑框时,它会隐藏两个div,而不是它所在的div。为什么会这样?怎么能修好呢

例如:

代码示例:

(function($){
$.fn.extend({

premiumSlider: function(options) {

  var defaults = {
    width: 520, // Set width
    height: 340, // Set height
    startImage: 0, // Choose start image
    tranSpeed: 800, // Time taken to transition between images
    pauseTime: 3000, // Time slider remains paused before transitioning
    autoPlay: true, // Play the slider on load; true/false
    pauseHover: true, // Pause the slider on mouse hover
    transition: 'Slide', // Transition style
    easing: 'easeInOutExpo', // Easing style (slide only)
    preload: true, // Whether or not to preload images
    preloadIcon: 'images/loading.gif',
    preloadColour: '#fff'
  }

      var options = $.extend(defaults, options);

  return this.each(function(){
      var vars = options;
      var obj = $(this);
      var stuff = obj.find('.slider-wrap');

      $('.icon').click(function(){
        obj.hide();
      });
  });
}
});
})(jQuery);
问题是选择器应用于两个图标。您可以使用以下方法解决此问题:

如果嵌套得更深,则可以使用:


因为您在查找.icon时未限定搜索范围。将单击功能更改为如下所示:

$('.icon', obj).click(function()
{         
 obj.hide();       
}
);

这是因为在您的函数中:

return this.each(function(){
      var vars = options;
      var obj = $(this);
      var stuff = obj.find('.slider-wrap');

      $('.icon').click(function(){
        obj.hide();
      });
  });
该行:

var stuff = obj.find('.slider-wrap');

正在查找两个滑块都使用的类“slider wrap”。你可能想考虑单独地隐藏它们。

你如何将你的插件绑定到黑匣子?这意味着这是一个插件,所以我这样做如下:$(‘滑动器’)。和$('.slider-2').premiumSlider()$(本节)。引用.premiumSlider()前面的选择器,因此我认为隐藏它会隐藏该选择器,但它同时隐藏这两个选择器。这只是我遇到的一个更严重问题的简化版本。简单地说,该插件不能在一个页面上处理多个实例。我也在想办法得到它。。
$('.icon', obj).click(function()
{         
 obj.hide();       
}
);
return this.each(function(){
      var vars = options;
      var obj = $(this);
      var stuff = obj.find('.slider-wrap');

      $('.icon').click(function(){
        obj.hide();
      });
  });
var stuff = obj.find('.slider-wrap');