Re: [jQuery] .each backwards ?

2006-10-07 Thread Michael Geary
 From: Dossy Shiobara
 
 I'm surprised there's no .reverse().  i.e.:
 
 $(collection).reverse().each(...) 

Great idea!

How about the world's smallest plugin:

   jQuery.fn.reverse = [].reverse;

Try it out at http://jquery.com/ by entering these lines into the FireBug
console:

   jQuery.fn.reverse = [].reverse;

   $('h3').each( function() { console.info( this.innerHTML ); } );

   $('h3').reverse().each( function() { console.info( this.innerHTML ); } );

Just for fun, you can add .sort():

   jQuery.fn.sort = [].sort;

And then try this:

   $('h3').sort( function( a, b ) {
  var a = a.innerHTML, b = b.innerHTML;
  return a  b ? 1 : a  b ? -1 : 0
   }).each( function() { console.info( this.innerHTML ); } );

Or all on one line for the FireBug console:

   $('h3').sort( function( a, b ) { var a = a.innerHTML, b = b.innerHTML;
return a  b ? 1 : a  b ? -1 : 0  } ).each( function() { console.info(
this.innerHTML ); } );

It looks like you can add pretty much any Array method this way, although
most of the others duplicate what you can do in other ways. For example:

   jQuery.fn.shift = [].shift;

And then try:

   $h3 = $('h3')
   $h3
   $h3.shift()
   $h3
   $h3.shift()
   $h3

Armed with this knowledge, one might be tempted to load all the Array
methods in one fell swoop:

   jQuery.fn.prototype = Array.prototype;

But that does not work, presumably because jQuery is already being a bit
sneaky about its Array-like behavior.

-Mike


___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] .each backwards ?

2006-10-07 Thread kenton.simpson

Thanks for the Idea. This works 

jQuery.fn.reverse = function() {
 this.pushStack(this.get().reverse());
 return this;
}

a long that thread a lot more resorting function may be useful.
-- 
View this message in context: 
http://www.nabble.com/.each-backwards---tf2399145.html#a6693603
Sent from the JQuery mailing list archive at Nabble.com.


___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] .each backwards ?

2006-10-07 Thread Jörn Zaefferer
kenton.simpson schrieb:
 Thanks for the Idea. This works 

 jQuery.fn.reverse = function() {
  this.pushStack(this.get().reverse());
  return this;
 }
   
Nice. That is a better approach then just doing jQuery.fn.reverse = 
[].reverse.

-- Jörn

___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] .each backwards ?

2006-10-07 Thread John Resig
 jQuery.fn.reverse = function() {
  this.pushStack(this.get().reverse());
  return this;
 }

Huh, at first I though that that code would infinitely recurse, I
totally forgot that .get() returns a clean array of elements - good
call! Just a quick simplification:

jQuery.fn.reverse = function() {
  return this.pushStack(this.get().reverse(), arguments);
};

going through the other functions, you can easily do .sort() and the
other functions too:

jQuery.fn.sort = function() {
  return this.pushStack( [].sort.apply( this, arguments ), []);
};

// These don't quite work correctly - but making them work correctly would
//  break jQuery (having duplicate instances of an element)
jQuery.fn.push = jQuery.fn.add;
jQuery.fn.unshift = jQuery.fn.unshift;

jQuery.fn.slice = function() {
  return this.pushStack( [].slice.apply( this, arguments ), arguments );
};

jQuery.fn.pop = function(fn){
  return this.slice( 0, -1, fn );
};

jQuery.fn.shift = function(fn){
  return this.slice( 1, this.length, fn );
};

I can definitely see .sort() and .reverse() being useful - along with
a better version of slice, but push, pop, shift, unshift are all kind
of lame (IMO).

--John

___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] .each backwards ?

2006-10-07 Thread kenton.simpson

I agree, do you think .sort() and .reverse() could be added to core jQuery
object in the future, or should I just add a plugin.
-- 
View this message in context: 
http://www.nabble.com/.each-backwards---tf2399145.html#a6694292
Sent from the JQuery mailing list archive at Nabble.com.


___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] .each backwards ?

2006-10-07 Thread Michael Geary
  jQuery.fn.reverse = function() {
 this.pushStack(this.get().reverse());
 return this;
  }

 Nice. That is a better approach then just doing 
 jQuery.fn.reverse = [].reverse.

I'm curious, what is the advantage of one approach over the other?

-Mike


___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] .each backwards ?

2006-10-07 Thread John Resig
On 10/7/06, Michael Geary [EMAIL PROTECTED] wrote:
   jQuery.fn.reverse = function() {
  this.pushStack(this.get().reverse());
  return this;
   }

  Nice. That is a better approach then just doing
  jQuery.fn.reverse = [].reverse.

 I'm curious, what is the advantage of one approach over the other?

Since the first once uses jQuery's nice pushStack method, you can now
do (in a silly example):

$(div)
.reverse()
.addClass(test)
.end()
.find(p) 

or even:

$(div).reverse(function(){
alert(All the divs, in reverse:  + this);
});

--John

___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] .each backwards ?

2006-10-07 Thread John Resig
Oops, I meant to make that:
jQuery.fn.unshift = jQuery.fn.add;

The issue is, however, that fundamentally .push() or .unshift() won't
work as expected, since adding an item to a jQuery object isn't like
adding a item to a normal array. The jQuery object is more like a
'Set' than it is a true 'Array'.

--John

On 10/7/06, Jörn Zaefferer [EMAIL PROTECTED] wrote:
 Hi John!
  jQuery.fn.unshift = jQuery.fn.unshift;
 
 What is that supposed to do?

 -- Jörn

 ___
 jQuery mailing list
 discuss@jquery.com
 http://jquery.com/discuss/



-- 
John Resig
http://ejohn.org/
[EMAIL PROTECTED]

___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] .each backwards ?

2006-10-07 Thread John Resig
 I agree, do you think .sort() and .reverse() could be added to core jQuery
 object in the future, or should I just add a plugin.

Sort, reverse, and splice are definitely possible - maybe for the 1.1 release.

--John

___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] .each backwards ?

2006-10-06 Thread Blair Mitchelmore
I propose hcae:

jQuery.fn.hcae = function( fn, args ) {
return jQuery.hcae( this, fn, args );
};

jQuery.hcae = function( obj, fn, args ) {
if ( obj.length == undefined )
for ( var i in obj )
fn.apply( obj[i], args || [i, obj[i]] );
else
for ( var i = obj.length - 1; i = 0; --i )
fn.apply( obj[i], args || [i, obj[i]] );
return obj;
};

-blair ;)

kenton.simpson wrote:
 Is there a way to make .each walk backwards threw the element collection?

___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] .each backwards ?

2006-10-06 Thread Ⓙⓐⓚⓔ
interesting!

When would length be undefined on an JQ object?

When I first saw the question, I thought of tail recursion, does JS
deal well (optimize) tail recursion?

On 10/6/06, Blair Mitchelmore [EMAIL PROTECTED] wrote:
 I propose hcae:

 jQuery.fn.hcae = function( fn, args ) {
 return jQuery.hcae( this, fn, args );
 };

 jQuery.hcae = function( obj, fn, args ) {
 if ( obj.length == undefined )
 for ( var i in obj )
 fn.apply( obj[i], args || [i, obj[i]] );
 else
 for ( var i = obj.length - 1; i = 0; --i )
 fn.apply( obj[i], args || [i, obj[i]] );
 return obj;
 };

 -blair ;)

 kenton.simpson wrote:
  Is there a way to make .each walk backwards threw the element collection?

 ___
 jQuery mailing list
 discuss@jquery.com
 http://jquery.com/discuss/



-- 
Ⓙⓐⓚⓔ - יעקב   ʝǡǩȩ   ᎫᎪᏦᎬ
___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] .each backwards ?

2006-10-06 Thread Matt Stith
i know js 1.2 does, but i think its only supported in ff 2.0
currently... but dont quote me on that.

On 10/6/06, Ⓙⓐⓚⓔ [EMAIL PROTECTED] wrote:
 interesting!

 When would length be undefined on an JQ object?

 When I first saw the question, I thought of tail recursion, does JS
 deal well (optimize) tail recursion?

 On 10/6/06, Blair Mitchelmore [EMAIL PROTECTED] wrote:
  I propose hcae:
 
  jQuery.fn.hcae = function( fn, args ) {
  return jQuery.hcae( this, fn, args );
  };
 
  jQuery.hcae = function( obj, fn, args ) {
  if ( obj.length == undefined )
  for ( var i in obj )
  fn.apply( obj[i], args || [i, obj[i]] );
  else
  for ( var i = obj.length - 1; i = 0; --i )
  fn.apply( obj[i], args || [i, obj[i]] );
  return obj;
  };
 
  -blair ;)
 
  kenton.simpson wrote:
   Is there a way to make .each walk backwards threw the element
 collection?
 
  ___
  jQuery mailing list
  discuss@jquery.com
  http://jquery.com/discuss/
 


 --
 Ⓙⓐⓚⓔ - יעקב   ʝǡǩȩ   ᎫᎪᏦᎬ
 ___
 jQuery mailing list
 discuss@jquery.com
 http://jquery.com/discuss/

___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] .each backwards ?

2006-10-06 Thread Dossy Shiobara
On 2006.10.06, Blair Mitchelmore [EMAIL PROTECTED] wrote:
 I propose hcae:

Oh, god no.  I see the smiley so I'm guessing you're only kidding, but
before someone goes yeah, that's a good idea ...

 kenton.simpson wrote:
  Is there a way to make .each walk backwards threw the element collection?

I'm surprised there's no .reverse().  i.e.:

$(collection).reverse().each(...) 

-- Dossy

-- 
Dossy Shiobara  | [EMAIL PROTECTED] | http://dossy.org/
Panoptic Computer Network   | http://panoptic.com/
  He realized the fastest way to change is to laugh at your own
folly -- then you can let go and quickly move on. (p. 70)

___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/


Re: [jQuery] .each backwards ?

2006-10-06 Thread Ⓙⓐⓚⓔ
ff2,0 is up to js1.7

On 10/6/06, Matt Stith [EMAIL PROTECTED] wrote:
 i know js 1.2 does, but i think its only supported in ff 2.0
 currently... but dont quote me on that.

 On 10/6/06, Ⓙⓐⓚⓔ [EMAIL PROTECTED] wrote:
  interesting!
 
  When would length be undefined on an JQ object?
 
  When I first saw the question, I thought of tail recursion, does JS
  deal well (optimize) tail recursion?
 
  On 10/6/06, Blair Mitchelmore [EMAIL PROTECTED] wrote:
   I propose hcae:
  
   jQuery.fn.hcae = function( fn, args ) {
   return jQuery.hcae( this, fn, args );
   };
  
   jQuery.hcae = function( obj, fn, args ) {
   if ( obj.length == undefined )
   for ( var i in obj )
   fn.apply( obj[i], args || [i, obj[i]] );
   else
   for ( var i = obj.length - 1; i = 0; --i )
   fn.apply( obj[i], args || [i, obj[i]] );
   return obj;
   };
  
   -blair ;)
  
   kenton.simpson wrote:
Is there a way to make .each walk backwards threw the element
  collection?
  
   ___
   jQuery mailing list
   discuss@jquery.com
   http://jquery.com/discuss/
  
 
 
  --
  Ⓙⓐⓚⓔ - יעקב   ʝǡǩȩ   ᎫᎪᏦᎬ
  ___
  jQuery mailing list
  discuss@jquery.com
  http://jquery.com/discuss/
 
 ___
 jQuery mailing list
 discuss@jquery.com
 http://jquery.com/discuss/



-- 
Ⓙⓐⓚⓔ - יעקב   ʝǡǩȩ   ᎫᎪᏦᎬ
___
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/