the output ...

<body>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
</body>

that's it :D

On Mon, Oct 27, 2008 at 12:30 PM, Andrea Giammarchi <
[EMAIL PROTECTED]> wrote:

> jQuery plugin ... Ariel, just try if you like, forget if you don't.
>
> I am sure it is possible to optimize the procedure, rught now I am focused
> on its functionality.
>
> (function($){ // Andrea Giammarchi Ultra Chain Suggestion
> var slice   = Array.prototype.slice;
> $.fn.extend({
> If:function(fn){
>     var _filter = this.filter(fn);
>     _filter._filter = this.filter(function(){return
> !~_filter.index(this)});
>     _filter._parent = this;
>     _filter._removed = _filter;
>     return _filter;
> },
> ElseIf:function(fn){
>     var filter  = function(){return !~_filter.index(this)},
>         _filter = this,
>         self = this._parent.filter(filter);
>     _filter = self.filter(fn);
>     _filter._filter = self.filter(filter);
>     _filter._parent = this._parent;
>     _filter._removed = $(slice.call(this._removed,
> 0).concat(slice.call(_filter, 0)));
>     return _filter;
> },
> Else:function(){
>     var _filter = this._removed;
>     return this._parent.filter(function(){return !~_filter.index(this)});
> },
> Do:function(fn){
>     this.each(fn);
>     return  this;
> }
> })})(jQuery);
>
> // Example
> $(function(){
>     $("div")
>         .If(function(){return $(this).text() == "3" || $(this).text() ==
> "5"})
>             .text("match the 3 or 5 check")
>         .ElseIf(function(){return $(this).text() & 1})
>             .text("odd numbers")
>         .ElseIf(function(){return $(this).text() == 2})
>             .Do(function(){
>                 $(this).text("text is equal 2");
>             })
>         .ElseIf(function(){return $(this).text() == 6})
>             .text("match the 6 condition")
>         .Else()
>             .text("this is 4 or 8");
>     ;
> })
>
> Best Regards,
> Andrea
>
>
>
> On Mon, Oct 27, 2008 at 11:09 AM, Andrea Giammarchi <
> [EMAIL PROTECTED]> wrote:
>
>> Ok, test completed, this is the idea as working example:
>>
>> [snip]
>> Array.prototype.If = function(callback){
>>     var _filter = this.filter(callback);
>>     _filter._filter = this.filter(function(value){return
>> !~_filter.indexOf(value)});
>>     _filter._parent = this;
>>     _filter._removed = _filter;
>>     return _filter;
>> };
>> Array.prototype.ElseIf = function(callback){
>>     var _filter = this,
>>         self = this._parent.filter(function(value){return
>> !~_filter.indexOf(value)});
>>     _filter = self.filter(callback);
>>     _filter._filter = self.filter(function(value){return
>> !~_filter.indexOf(value)});
>>     _filter._parent = this._parent;
>>     _filter._removed = this._removed.concat(_filter);
>>     return _filter;
>> };
>> Array.prototype.Else = function(callback){
>>     var _filter = this._removed;
>>     return this._parent.filter(function(value){return
>> !~_filter.indexOf(value)});
>> };
>> Array.prototype.Do = function(){
>>     alert("Value: " + this);
>>     return this;
>> };
>>
>> ([1,2,3,4,5,6,7,8])
>>     .If(function(v){return v === 3 || v === 5})
>>         .Do() // 3, 5
>>     .ElseIf(function(v){return v & 1})
>>         .Do() // 1, 7
>>     .ElseIf(function(v){return v === 2})
>>         .Do() // 2
>>     .ElseIf(function(v){return v === 6})
>>         .Do() // 6
>>     .Else()
>>         .Do() // 4, 8
>> ;
>>
>> That's it, a "chain nightmare" but at the end an expected result in ultra
>> chain. Dunno about performances, it is more an experiment than something
>> else, at least it works, so get as is :-)
>>
>> Kind Regards
>>
>>
>> On Mon, Oct 27, 2008 at 10:32 AM, Andrea Giammarchi <
>> [EMAIL PROTECTED]> wrote:
>>
>>> Sorry Ariel, there is a logical chain error in my example, I'll prepare a
>>> better one with a couple of Array prototypes and you'll deciede if it is
>>> interesting or not, is it fine?
>>>
>>> Regards
>>>
>>>
>>> On Mon, Oct 27, 2008 at 9:21 AM, Andrea Giammarchi <
>>> [EMAIL PROTECTED]> wrote:
>>>
>>>> Ariel, thanks for the link, i quickly read it and it seems other people
>>>> thought about that idea before.
>>>> Anyway, my vision is more semantic and less complicated, since with a
>>>> callback inside the if you can define many expressions, do operations, and
>>>> then return true or false.
>>>>
>>>> What I mean is that your if().hasClass is limited to one or more jQuery
>>>> operation, while if(callbackInScope) has no limits at all and inside you 
>>>> can
>>>> return $(this).hasClass("whatever").
>>>>
>>>> In any case and for performances improvement, for the if else I would
>>>> create a jQuery istance instead of callback
>>>>
>>>> this.if = jQuery(this);
>>>> this.if._condition = 1; // as first condition to evaluate (make
>>>> if(this._condition) check simpler)
>>>>
>>>> so te call will be something like
>>>> $(elm).on("click")
>>>>     .if
>>>>         .hasClass('foo')
>>>>         .then()..
>>>>
>>>> As I said before, this implementation suffer about And or Or
>>>> possibilities
>>>>
>>>> $(elm).on("click")
>>>>     .if
>>>>         .hasClass('foo')
>>>>         .And
>>>>         .text()
>>>>         .then()..
>>>>
>>>> as last limitation, you cannot compare properties:
>>>>
>>>> if.text() == "something"
>>>>
>>>> for this reason I suppose that the callback inside the
>>>> If(whateverCallback) that as implementation will be simply a filter inside
>>>> the method if
>>>> something like
>>>>
>>>> If:function(fn){ // set first list of elements
>>>>     this._succeded = jQuery(this).filter(fn);
>>>>     return this._succeded;
>>>> },
>>>> ElseIf:function(fn){ // exclude precedent elements
>>>>     var _succeded = this._succeded,
>>>>          result = jQuery(this).filter(fn).filter(function(i, elm){return
>>>> ~_succeded.indexOf(elm)});
>>>>     this._succeded =
>>>> this._succeded.concat(Array.prototype.slice.call(result, 0));
>>>>     return result;
>>>> },
>>>> Else:function(){ // return only last list of elements
>>>>     var _succeded = this._succeded;
>>>>     returh this.filter(function(i, elm){return
>>>> ~_succeded.indexOf(elm)});
>>>> }
>>>>
>>>> I did not test above code, it is only to demonstrate the ligic behind.
>>>> It does not seem to be that complicated but for sure it is more intense for
>>>> CPU and could be more problematic for mem leaks
>>>>
>>>> Regards
>>>>
>>>>
>>>> On Sun, Oct 26, 2008 at 11:42 PM, Ariel Flesler <[EMAIL PROTECTED]>wrote:
>>>>
>>>>> Andrea
>>>>>
>>>>> The if/else thing seems to make the code larger I think. If you need to
>>>>> pass a lambda to If, then another to else of elseIf...
>>>>>
>>>>> It's an interesting idea and it came up before. I'm not so sure it's
>>>>> brings clarity to code, though.
>>>>>
>>>>> Maybe .if().hasClass('foo').then()... but uhmm... seems to complicated.
>>>>>
>>>>> Here you have the old post I mentioned, maybe it gives you some cool
>>>>> idea :)
>>>>>
>>>>> http://groups.google.com/group/jquery-en/browse_thread/thread/43a69fa41f6e7089/6cebfee318992fe6
>>>>>
>>>>> Brandon disagreed back then as well... that's a good thing I think :D
>>>>>
>>>>>
>>>>
>>>
>>
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/jquery-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to