現在表示されている要素を追跡するためだけに、DOM 操作を削除しました。
それらは不要だと思います。私の2セント。
また、誰かが実際に使用するようなものにしました。
HTML:
<div id='Test'>
<ul class="ticker">
<li>Boo1</li>
<li>More boo1</li>
<li>Even more boo</li>
</ul>
<a class="prev" href="#">previous</a>
<a class="next" href="#">next</a>
</div>
JS:
jQuery.fn.Custom_cycler = function(Options){
var Options = jQuery.extend({'Next': 'a.next', 'Previous': 'a.prev', 'List': 'ul.ticker'},Options||{});
var List = jQuery(Options.List, this);
var Index = 0;
var Size = List.children().size();
List.children().hide().first().show();
var Move = function(Event){
Event.preventDefault();
if(Event.data)
{
Index++;
}
else
{
Index--;
}
Index=(Index+Size)%Size;
jQuery(List.children().hide().get(Index)).show();
};
jQuery(Options.Next, this).bind('click', true, Move);
jQuery(Options.Previous, this).bind('click', false, Move);
return(this);
};
次のように使用します。
jQuery('div#Test').Custom_cycler();
編集: イベント ハンドラーで data パラメーターを使用して、jQuery(...).data の代わりに Index/Size のクロージャーを使用できるように、両方のイベントに 1 つの関数のみを使用しました。
また、クロージャからいくつかの不要な変数を削除しました。
最後に、関数を呼び出すときに外部 DOM タグを誤って操作しないように、選択のコンテキストを絞り込みました。また、jQuery は DOM 全体をルックアップする必要がないため、実行速度も速くなります。
すべての要素ではなく、以前に表示された要素でのみ hide() を呼び出すことで、さらに最適化できます (Index の値から簡単に推測できます)。