среда, 13 июня 2012 г.

jQuery. Reverse each. Обратный перебор

Встречаются задачи, когда было бы удобно осуществлять перебор коллекции jQuery в обратном порядке. Ниже привожу функцию которая дает такую возможность:
jQuery.fn.reverseEach = (function () {
 var list = jQuery([1]);
 return function (c) {
  var el, i=this.length;
  try {
   while (i-->0 && (el=list[0]=this[i]) && c.call(list,i,el)!==false);
  }
  catch(e) {
   delete list[0];
   throw e;
  }
  delete list[0];
  return this;
 };
}());

$("li.classname").reverseEach(function(){
  // this сразу содержит объект jQuery
  console.log( 'id:', this.attr('id') );
  //return false; - Если в каком-то случае вернем false - обход прервется в этом месте
});
Если нужно поведение аналогичное .each(), когда к элементу обращаемся через $(this), нужно заменить 13 строчку на:
  return this.get(0); // Вместо: return this;