Nice. Another optimization just came to me, after seeing you filter out
the 'option' elements in the semantic selector... you can filter them
before they are returned, which speeds it up considerably:

$('*:not(option)', this)

As a side question, what advantage is there to calling the jQuery
function by name instead of by the "$" alias?

m.

On Fri, 2006-10-06 at 14:12 -0400, Mike Alsup wrote:
> Below is a consolidated serialize method to accommodate the optimized
> vs. semantic issue we've been pursuing recently.  Essentially, this is
> Matt Grimm's fastSerialize method with conditional behavior to drive
> the semantic logic.  I like how Matt wrote that method and the
> semantic stuff drops right in with minor changes.
> 
> I've re-written the form plugin to use this and changed the invoking
> methods.  Unfortunately I can't post it from inside my firewall at the
> moment.  In a nutshell, the changes boil down to adding a 'semantic'
> arg to each method and passing that arg along to 'serialize'.
> 
> Mike
> 
> 
> 
> jQuery.fn.serialize = function(semantic) {
>     var a = [];
> 
>     if (semantic) {
>         var ok = {input:true, textarea:true, select:true, button:true};
>         var jq = jQuery('*', this).not('option');
>     }
>     else {
>         var jq = jQuery('input,textarea,select,button', this);
>     }
> 
>     jq.each(function() {
>         if (semantic && !ok[this.nodeName.toLowerCase()])
>             return;
> 
>         var n = this.name;
>         var t = this.type;
> 
>         if ( !n || this.disabled || t == 'reset' ||
>             (t == 'checkbox' || t == 'radio') && !this.checked ||
>             (t == 'submit' || t == 'image' || t == 'button') &&
> this.form.clicked != this ||
>             this.tagName.toLowerCase() == 'select' && this.selectedIndex == 
> -1)
>             return;
> 
>         if (t == 'image' && this.form.clicked_x)
>             return a.push(
>                 {name: n+'_x', value: this.form.clicked_x},
>                 {name: n+'_y', value: this.form.clicked_y}
>             );
> 
>         if (t == 'select-multiple') {
>             jQuery('option:selected', this).each( function() {
>                 a.push({name: n, value: this.value});
>             });
>             return;
>         }
> 
>         a.push({name: n, value: this.value});
>     });
> 
>     return a;
> };
> 
> _______________________________________________
> jQuery mailing list
> discuss@jquery.com
> http://jquery.com/discuss/

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

Reply via email to