thank you guys, I really appreciate your comments and insight!
On Oct 1, 10:05 pm, howardk <[EMAIL PROTECTED]> wrote:
> I do occasionally look at the source code, but I'm still new enough to
> JavaScript that sometimes (even with 12 years of Java under my belt,
> and a whole slew of other languages going back some 40 years) that
> when I'm faced with new js constructs for the first time, about all I
> can do is stare glassy-eyed and go "Huh?" And that's pretty well my
> reaction to the snippet you posted below: "Huh?" :-) Would you be up
> for walking through it verbally, explaining what it's doing?
>
> In any event, not to worry: I'm learning fast, and I'm intrigued. This
> is a much more interesting language than I had previously thought.
> Howard
>
> On Sep 30, 9:44 pm, "Michael Geary" <[EMAIL PROTECTED]> wrote:
>
> > Glad you like the [].join('') trick, Howard - and good catch on the
> > unnecessary wrapper. You didn't miss anything, and that
> > simplifies the example down to:
>
> > $('#exampleCA').append( [
> > '<table style="width:718px;border:2px inset #336699">',
> > '<tr class="exampleRow">',
> > '<td style="text-align:center;color:white;">',
> > 'I was created by jQuery append',
> > '</td>',
> > '</tr>',
> > '</table>'
> > ].join('') );
>
> > One other thing I like about this approach is that - unlike the +
> > concatenation operator - the comma operator has lower precedence
> > than the ? : conditional operator and the || and && logical operators. So
> > you can write code like this:
>
> > var html = [
> > '<div>',
> > name ? name : 'no name',
> > '</div>'
> > ].join('');
>
> > You could do that with string concatenation, but it would require
> > parenthesis around the conditional expression, which adds a bit of
> > ugliness.
>
> > You're right on the appendTo vs. append question too - the docs need to be
> > updated. Check the source code:
>
> > jQuery.each({
> > appendTo: "append",
> > prependTo: "prepend",
> > insertBefore: "before",
> > insertAfter: "after",
> > replaceAll: "replaceWith"
> > }, function(i,n){
> > jQuery.fn[ i ] = function(){
> > var a = arguments;
> > return this.each(function(){
> > for ( var j = 0, al = a.length; j < al; j++ )
> > jQuery(a[j])[n]( this );
> > });
> > };
> > });
>
> > appendTo is just a wrapper around append - just like prependTo, etc. And
> > all of these functions run their arguments through
> > domManip(), which is the code that handles the text vs. DOM element
> > question.
>
> > I wouldn't assume that any jQuery function that takes a string will also
> > take DOM elements or jQuery objects, but for this group of
> > functions it's certainly true.
>
> > -Mike
>
> > > From: howardk
>
> > > Nice use of join()! I'm new to JavaScript and jQuery both,
> > > and it's nice to come across little snippets like this I can
> > > readily add to my jQuery repetoire and that slightly expand
> > > my understanding of JavaScript.
>
> > > By the way, the docs show that it's legal to pass, as an
> > > argument to append(), either a jQuery object (as you're
> > > doing), a DOM element, or a string. So you really don't need
> > > to wrap the stringified array in a jQuery object before you
> > > pass it in. Unless there's another reason for doing so that
> > > I'm missing.
>
> > > Apropos to the above, I wonder why the docs for appendTo()
> > > show a string as being the only legal argument type? I tried
> > > a test passing in a jQuery object instead and it worked just
> > > fine. Does that mean you can use a jQuery object *any* time a
> > > string is called for in other jQuery methods as well? Or just
> > > a case of the documentation needing to be adjusted in this one case?