2016-08-30 122 views
-1

请问我在同一页面上制作这个jQuery插件的多个实例。问题是第一位的工作正常,但别人不一样,这里是我的代码:如何在同一页面上创建这个jquery插件的多个实例?

(function($){ 
    $.fn.easyPaginate = function (options) { 
    var defaults = { 
     paginateElement: 'li', 
     hashPage: 'page', 
     elementsPerPage: 10, 
     effect: 'default', 
     slideOffset: 200, 
     firstButton: true, 
     firstButtonText: '<<', 
     lastButton: true, 
     lastButtonText: '>>',   
     prevButton: true, 
     prevButtonText: '<',   
     nextButton: true, 
     nextButtonText: '>' 
    }  
    return this.each (function (instance) {  
     var plugin = Object; 
     plugin.el = $(this); 
     plugin.el.addClass('easyPaginateList'); 
     plugin.settings = { 
      pages: 0, 
      objElements: Object, 
      currentPage: 1 
     } 
     var getNbOfPages = function() { 
      return Math.ceil(plugin.settings.objElements.length/
     plugin.settings.elementsPerPage);   
     }; 
     var displayNav = function() { 
      htmlNav = '<div class="easyPaginateNav">'; 
      if(plugin.settings.firstButton) { 
       htmlNav += '<a href="#'+plugin.settings.hashPage+':1" title="First page" rel="1" class="first">'+plugin.settings.firstButtonText+'</a>'; 
      } 
      if(plugin.settings.prevButton) { 
       htmlNav += '<a href="" title="Previous" rel="" class="prev">'+plugin.settings.prevButtonText+'</a>'; 
      } 
      for(i = 1;i <= plugin.settings.pages;i++) { 
       htmlNav += '<a href="#'+plugin.settings.hashPage+':'+i+'" title="Page '+i+'" rel="'+i+'" class="page">'+i+'</a>'; 
      }; 
      if(plugin.settings.nextButton) { 
       htmlNav += '<a href="" title="Next" rel="" class="next">'+plugin.settings.nextButtonText+'</a>'; 
      } 
      if(plugin.settings.lastButton) { 
       htmlNav += '<a href="#'+plugin.settings.hashPage+':'+plugin.settings.pages+'" title="Last page" rel="'+plugin.settings.pages+'" class="last">'+plugin.settings.lastButtonText+'</a>'; 
      } 

      htmlNav += '</div>'; 
      plugin.nav = $(htmlNav); 
      plugin.nav.css({ 
       'width': plugin.el.width() 
      }); 
      plugin.el.after(plugin.nav); 

      $('.easyPaginateNav a.page, .easyPaginateNav a.first, .easyPaginateNav a.last', plugin).on('click', function(e) {     
       e.preventDefault(); 
       displayPage($(this).attr('rel'));     
      }); 
      $('.easyPaginateNav a.prev', plugin).on('click', function(e) {     
       e.preventDefault(); 
       page = plugin.settings.currentPage > 1?parseInt(plugin.settings.currentPage) - 1:1; 
       displayPage(page); 
      }); 

      $('.easyPaginateNav a.next', plugin).on('click', function(e) {     
       e.preventDefault(); 
       page = plugin.settings.currentPage < plugin.settings.pages?parseInt(plugin.settings.currentPage) + 1:plugin.settings.pages; 
       displayPage(page); 
      }); 
     }; 
     var displayPage = function(page, forceEffect) { 
      if(plugin.settings.currentPage != page) { 
       plugin.settings.currentPage = parseInt(page); 
       offsetStart = (page - 1) * plugin.settings.elementsPerPage; 
       offsetEnd = page * plugin.settings.elementsPerPage; 
       if(typeof(forceEffect) != 'undefined') { 
        eval("transition_"+forceEffect+"("+offsetStart+", "+offsetEnd+")"); 
       }else { 
        eval("transition_"+plugin.settings.effect+"("+offsetStart+", "+offsetEnd+")"); 
       } 

       plugin.nav.find('.current').removeClass('current'); 
       plugin.nav.find('a.page:eq('+(page - 1)+')').addClass('current'); 

       switch(plugin.settings.currentPage) { 
        case 1: 
         $('.easyPaginateNav a', plugin).removeClass('disabled'); 
         $('.easyPaginateNav a.first, .easyPaginateNav a.prev', plugin).addClass('disabled'); 
         break; 
        case plugin.settings.pages: 
         $('.easyPaginateNav a', plugin).removeClass('disabled'); 
         $('.easyPaginateNav a.last, .easyPaginateNav a.next', plugin).addClass('disabled'); 
         break; 
        default: 
         $('.easyPaginateNav a', plugin).removeClass('disabled'); 
         break; 
       } 
      } 
     }; 
     var transition_default = function(offsetStart, offsetEnd) { 
      plugin.currentElements.hide(); 
      plugin.currentElements = plugin.settings.objElements.slice(offsetStart, offsetEnd).clone(); 
      plugin.el.html(plugin.currentElements); 
      plugin.currentElements.show(); 
     }; 

     var transition_fade = function(offsetStart, offsetEnd) { 
      plugin.currentElements.fadeOut(); 
      plugin.currentElements = plugin.settings.objElements.slice(offsetStart, offsetEnd).clone(); 
      plugin.el.html(plugin.currentElements); 
      plugin.currentElements.fadeIn(); 
     }; 

     var transition_slide = function(offsetStart, offsetEnd) { 
      plugin.currentElements.animate({ 
       'margin-left': plugin.settings.slideOffset * -1, 
       'opacity': 0 
      }, function() { 
       $(this).remove(); 
      }); 

      plugin.currentElements = plugin.settings.objElements.slice(offsetStart, offsetEnd).clone(); 
      plugin.currentElements.css({ 
       'margin-left': plugin.settings.slideOffset, 
       'display': 'block', 
       'opacity': 0, 
       'min-width': plugin.el.width()/2 
      }); 
      plugin.el.html(plugin.currentElements); 
      plugin.currentElements.animate({ 
       'margin-left': 0, 
       'opacity': 1 
      }); 
     }; 

     var transition_climb = function(offsetStart, offsetEnd) {    
      plugin.currentElements.each(function(i) { 
       var $objThis = $(this); 
       setTimeout(function() { 
        $objThis.animate({ 
         'margin-left': plugin.settings.slideOffset * -1, 
         'opacity': 0 
        }, function() { 
         $(this).remove(); 
        }); 
       }, i * 200); 
      }); 

      plugin.currentElements = plugin.settings.objElements.slice(offsetStart, offsetEnd).clone(); 
      plugin.currentElements.css({ 
       'margin-left': plugin.settings.slideOffset, 
       'display': 'block', 
       'opacity': 0, 
       'min-width': plugin.el.width()/2 
      }); 
      plugin.el.html(plugin.currentElements); 
      plugin.currentElements.each(function(i) { 
       var $objThis = $(this); 
       setTimeout(function() { 
        $objThis.animate({ 
         'margin-left': 0, 
         'opacity': 1 
        }); 
       }, i * 200); 
      }); 
     }; 

     plugin.settings = $.extend({}, defaults, options); 

     plugin.currentElements = $([]); 
     plugin.settings.objElements = plugin.el.find(plugin.settings.paginateElement); 
     plugin.settings.pages = getNbOfPages(); 
     if(plugin.settings.pages > 1) { 
      plugin.el.html(); 

      // Here we go 
      displayNav(); 

      page = 1; 
      if(document.location.hash.indexOf('#'+plugin.settings.hashPage+':') != -1) { 
       page = parseInt(document.location.hash.replace('#'+plugin.settings.hashPage+':', '')); 
       if(page.length <= 0 || page < 1 || page > plugin.settings.pages) { 
        page = 1; 
       } 
      } 

      displayPage(page, 'default'); 
     } 
    }); 
    }; 
    })(jQuery); 

请,如果任何人能帮助我

谢谢!

+0

你可以请一个Jsfiddle吗? –

+0

什么问题?检查[如何提出问题](http://stackoverflow.com/help/how-to-ask)并帮助我们为您提供帮助。 – krillgar

回答

0

不要选择元素

$('.easyPaginateNav a.next') 

但使用所述插件元件(S):

plugin.el.find('easyPaginateNav a.next'`) 

你做到了很好的在这个例子行:

plugin.nav.find('.current').removeClass('current'); 

这样您将始终选择当前插件实例中的元素。

编辑:

改变了很多东西,甚至不知道是什么原因导致的主要问题(这是plugin.settings.objElements是不正确的)。请检查下面的代码:

$.fn.easyPaginate = function(options) { 
 
    var defaults = { 
 
     paginateElement: 'li', 
 
     hashPage: 'page', 
 
     elementsPerPage: 10, 
 
     effect: 'default', 
 
     slideOffset: 200, 
 
     firstButton: true, 
 
     firstButtonText: '<<', 
 
     lastButton: true, 
 
     lastButtonText: '>>', 
 
     prevButton: true, 
 
     prevButtonText: '<', 
 
     nextButton: true, 
 
     nextButtonText: '>' 
 
    } 
 
    return this.each(function(instance) { 
 
     var plugin = { 
 
     \t nav: null, 
 
     \t el: $(this), 
 
     \t settings: { 
 
       pages: 0, 
 
       objElements: null, 
 
       currentPage: 1 
 
      } 
 
     }; 
 
     plugin.settings = $.extend({}, defaults, options); 
 
     plugin.settings.objElements = plugin.el.find(plugin.settings.paginateElement); 
 
     plugin.el.addClass('easyPaginateList'); 
 
     var getNbOfPages = function() { 
 
      return Math.ceil(plugin.settings.objElements.length/plugin.settings.elementsPerPage); 
 
     }; 
 
     var displayNav = function() { 
 
      htmlNav = '<div class="easyPaginateNav">'; 
 
      if (plugin.settings.firstButton) { 
 
       htmlNav += '<a href="#' + plugin.settings.hashPage + ':1" title="First page" rel="1" class="first">' + plugin.settings.firstButtonText + '</a>'; 
 
      } 
 
      if (plugin.settings.prevButton) { 
 
       htmlNav += '<a href="" title="Previous" rel="" class="prev">' + plugin.settings.prevButtonText + '</a>'; 
 
      } 
 
      for (i = 1; i <= plugin.settings.pages; i++) { 
 
       htmlNav += '<a href="#' + plugin.settings.hashPage + ':' + i + '" title="Page ' + i + '" rel="' + i + '" class="page">' + i + '</a>'; 
 
      }; 
 
      if (plugin.settings.nextButton) { 
 
       htmlNav += '<a href="" title="Next" rel="" class="next">' + plugin.settings.nextButtonText + '</a>'; 
 
      } 
 
      if (plugin.settings.lastButton) { 
 
       htmlNav += '<a href="#' + plugin.settings.hashPage + ':' + plugin.settings.pages + '" title="Last page" rel="' + plugin.settings.pages + '" class="last">' + plugin.settings.lastButtonText + '</a>'; 
 
      } 
 
      htmlNav += '</div>'; 
 
      plugin.nav = $(htmlNav); 
 
      plugin.nav.css({ 
 
       'width': plugin.el.width() 
 
      }); 
 
      
 
      plugin.el.after(plugin.nav); 
 
      
 
      plugin.nav.find('a.page, a.first, a.last').on('click', function(e) { 
 
       e.preventDefault(); 
 
       displayPage($(this).attr('rel')); 
 
      }); 
 

 
      plugin.nav.find('a.prev').on('click', function(e) { 
 
       e.preventDefault(); 
 
       page = plugin.settings.currentPage > 1 ? parseInt(plugin.settings.currentPage) - 1 : 1; 
 
       displayPage(page); 
 
      }); 
 

 
      plugin.nav.find('a.next').on('click', function(e) { 
 
       e.preventDefault(); 
 
       page = plugin.settings.currentPage < plugin.settings.pages ? parseInt(plugin.settings.currentPage) + 1 : plugin.settings.pages; 
 
       displayPage(page); 
 
      }); 
 
     }; 
 

 
     var displayPage = function(page, forceEffect) { 
 
      if (plugin.settings.currentPage != page) { 
 
       plugin.settings.currentPage = parseInt(page); 
 
       offsetStart = (page - 1) * plugin.settings.elementsPerPage; 
 
       offsetEnd = page * plugin.settings.elementsPerPage; 
 
       if (typeof(forceEffect) != 'undefined') { 
 
        eval("transition_" + forceEffect + "(" + offsetStart + ", " + offsetEnd + ")"); 
 
       } else { 
 
        eval("transition_" + plugin.settings.effect + "(" + offsetStart + ", " + offsetEnd + ")"); 
 
       } 
 

 
       plugin.nav.find('.current').removeClass('current'); 
 
       plugin.nav.find('a.page:eq(' + (page - 1) + ')').addClass('current'); 
 

 
       switch (plugin.settings.currentPage) { 
 
        case 1: 
 
         plugin.nav.find('a').removeClass('disabled'); 
 
         plugin.nav.find('a.first, a.prev').addClass('disabled'); 
 
         break; 
 
        case plugin.settings.pages: 
 
         plugin.nav.find('a').removeClass('disabled'); 
 
         plugin.nav.find('a.last, a.next').addClass('disabled'); 
 
         break; 
 
        default: 
 
         plugin.nav.find('a').removeClass('disabled'); 
 
         break; 
 
       } 
 
      } 
 
     }; 
 

 
     var transition_default = function(offsetStart, offsetEnd) { 
 
      plugin.currentElements.hide(); 
 
      plugin.currentElements = plugin.settings.objElements.slice(offsetStart, offsetEnd).clone(); 
 
      plugin.el.html(plugin.currentElements); 
 
      plugin.currentElements.show(); 
 
     }; 
 

 
     var transition_fade = function(offsetStart, offsetEnd) { 
 
      plugin.currentElements.fadeOut(); 
 
      plugin.currentElements = plugin.settings.objElements.slice(offsetStart, offsetEnd).clone(); 
 
      plugin.el.html(plugin.currentElements); 
 
      plugin.currentElements.fadeIn(); 
 
     }; 
 

 
     var transition_slide = function(offsetStart, offsetEnd) { 
 
      plugin.currentElements.animate({ 
 
       'margin-left': plugin.settings.slideOffset * -1, 
 
       'opacity': 0 
 
      }, function() { 
 
       $(this).remove(); 
 
      }); 
 

 
      plugin.currentElements = plugin.settings.objElements.slice(offsetStart, offsetEnd).clone(); 
 
      plugin.currentElements.css({ 
 
       'margin-left': plugin.settings.slideOffset, 
 
       'display': 'block', 
 
       'opacity': 0, 
 
       'min-width': plugin.el.width()/2 
 
      }); 
 
      plugin.el.html(plugin.currentElements); 
 
      plugin.currentElements.animate({ 
 
       'margin-left': 0, 
 
       'opacity': 1 
 
      }); 
 
     }; 
 

 
     var transition_climb = function(offsetStart, offsetEnd) { 
 
      plugin.currentElements.each(function(i) { 
 
       var $objThis = $(this); 
 
       setTimeout(function() { 
 
        $objThis.animate({ 
 
         'margin-left': plugin.settings.slideOffset * -1, 
 
         'opacity': 0 
 
        }, function() { 
 
         $(this).remove(); 
 
        }); 
 
       }, i * 200); 
 
      }); 
 

 
      plugin.currentElements = plugin.settings.objElements.slice(offsetStart, offsetEnd).clone(); 
 
      plugin.currentElements.css({ 
 
       'margin-left': plugin.settings.slideOffset, 
 
       'display': 'block', 
 
       'opacity': 0, 
 
       'min-width': plugin.el.width()/2 
 
      }); 
 
      plugin.el.html(plugin.currentElements); 
 
      plugin.currentElements.each(function(i) { 
 
       var $objThis = $(this); 
 
       setTimeout(function() { 
 
        $objThis.animate({ 
 
         'margin-left': 0, 
 
         'opacity': 1 
 
        }); 
 
       }, i * 200); 
 
      }); 
 
     }; 
 

 
     plugin.currentElements = $([]); 
 
     plugin.settings.pages = getNbOfPages(); 
 
     if (plugin.settings.pages > 1) { 
 
      plugin.el.html(); 
 
      // Here we go 
 
      displayNav(); 
 
      page = 1; 
 
      if (document.location.hash.indexOf('#' + plugin.settings.hashPage + ':') != -1) { 
 
       page = parseInt(document.location.hash.replace('#' + plugin.settings.hashPage + ':', '')); 
 
       if (page.length <= 0 || page < 1 || page > plugin.settings.pages) { 
 
        page = 1; 
 
       } 
 
      } 
 
      displayPage(page, 'default'); 
 
     } 
 
    }); 
 
}; 
 

 
$('ul').easyPaginate({ 
 
\t elementsPerPage: 2 
 
})
body { 
 
    font-family: sans-serif; 
 
} 
 
.easyPaginateNav a { 
 
    display: inline-block; 
 
    margin: 0 5px; 
 
    padding: 2px; 
 
    text-align: center; 
 
    width: 20px; 
 
    border: 1px solid #ccc; 
 
    text-decoration: none; 
 
} 
 
.easyPaginateNav a.disabled { 
 
    opacity: .3; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul> 
 
    <li>List 1, element 1</li> 
 
    <li>List 1, element 2</li> 
 
    <li>List 1, element 3</li> 
 
    <li>List 1, element 4</li> 
 
    <li>List 1, element 5</li> 
 
</ul> 
 
<ul> 
 
    <li>List 2, element 1</li> 
 
    <li>List 2, element 2</li> 
 
    <li>List 2, element 3</li> 
 
    <li>List 2, element 4</li> 
 
    <li>List 2, element 5</li> 
 
</ul>

同样在this Fiddle

+0

非常感谢你skobaljic我会尝试它,但如果你可以编辑我的代码,并显示我编辑的代码我将gratefull –

+0

它没有解决问题,你可以帮我请! –

+0

非常感谢你skobaljic你是伟大的!美妙的解决方案:D –

相关问题