I'm trying to follow this thread but it's a little loose so apologies if I'm
missing the point.

The only thing I want to disagree with is the last point.  it doesnt matter
whether the context is a class or id.  The context's function is to reduce
the scope of the selectors search, and the primary reason for that is simply
performance.

I know there are many signatures for $, but when providing a selector and
context the primary goal is to reduce the scope of the current selector.
There are plenty of cases where the context is a large set of nodes.

For example I might need to modify a portion of the dom that represents a
pagination interface that is provided at the top and bottom of the
interface.  So I create a contect based on the class representing the
interface. Say

var pagination = $('.pagination');

Then to update a potion of that sub-dom I would do somthing like:

myCustomUpdate($('.pagelist', pagination));

This saves jquery from having to seach the entire document  for elements
with the class 'pagelist', a big win. Instead the selector only looks under
the element array represented by the context array for my variable
'pagination'.

Does this help you?  can we talk in very general examples to help illuminate
the cases you are concerned about?

Thatcher

On Wed, Mar 25, 2009 at 8:53 PM, Julian Aubourg <[email protected]>wrote:

> > In my mind context (as I said but I will repeat ;) should be only dom
> > node, or single id string. If given by user. So these will be only
> > three valid forms:
>
> I so disagree with this. If we're talking efficient pages here, you HAVE to
> authorise a jQuery object as context.
> Say you have a list of items with elements within you wanna bind click
> handlers to. A nice way (and AFAIK efficient, both in term of performance
> AND memory consumption) to do so would be like this:
>
> var items = $(itemSelector);
> $(subElementSelector1,items).click(function() {...});
> $(subElementSelector2,items).click(function() {...});
> ...
> $(subElementSelectorN,items).click(function() {...});
>
> Your idea of having only *1* dom node or to limit context expressions as id
> only would forbid such a construct and would only lead to a less elegant and
> less efficient solution.
>
> I'm a great fan of contexts and use them as often as I can. They are as
> good as the power of expression we have to express them. Reduce that and you
> can be sure no one will ever use contexts again, at least not in a
> real-world web application where ids are far less used than classes.
>
> To me, the rational behind contexts within jQuery is crystal clear. Why
> reduce it to a getElementById wrapper?
>
> 2009/3/26 DBJ <[email protected]>
>
>
>> This is, of course, true and fine. Exactly the purpose of the context.
>> To define the starting node BELLOW which it will look further. Fine.
>> It is only that this is not what current documentation is saying :
>>
>> http://docs.jquery.com/Core/jQuery#expressioncontext
>>
>> At least NOT clearly and NOT unambigously...
>>
>> On top of that jQuery.selector and jQuery.context in this case are not
>> what was originaly passed but what was processed inside jQ
>>
>> So:
>>
>> $("[name]","#people") which is equivalent to $("#people
>>  [name]").
>>
>> Results in :
>>
>> selector := "'#people [name]"  // space in the middle
>> context  := DOMDocument
>>
>> After call to $() finsihes, and plugins can start  using this properties.
>> Above is wrong and should be :
>>
>> selector := "[name]"
>> context  := "#people " // space on the end
>>
>> This might seem as some nitpicking, but it is actually extrmely important.
>> Because if context is always given , jQuery enabled pages will be faster.
>> In some case much faster. So the context syntax should be crystal
>> clear and consistent.
>>
>> In my mind context (as I said but I will repeat ;) should be only dom
>> node, or single id string. If given by user. So these will be only
>> three valid forms:
>>
>> $("'#people")  // dom document default context
>> $("[name], "#people")  //single id
>> $("[name]", domNode ) // element given as context
>>
>> I see no reason for anything else to act as context.
>> This would be (as I also already said ;) excellent start for people to
>> understand how to structure their pages and why. And why are properly
>> strucutred pages faster to traverse with jQuery( selector, context )
>> calls.
>>
>>
>>
>>
>>
>> 2009/3/25 Julian Aubourg <[email protected]>:
>> > $("[name]","#people") is equivalent to $("#people
>>  [name]").
>> > Please note the spacing.
>> > It then means every element with a name attribute BELOW the element of
>> id
>> > "people".
>> > $("#people[name]") means the element of id "people" with a name
>> attribute.
>> > So, YES, this is quite different.
>> > 2009/3/25 DBJ <[email protected]>
>> >>
>> >> @Daniel
>> >>
>> >> You confuse me ;o)
>> >>
>> >> Aa I said : A quick sample I have made (quickly) is here:
>> >> http://jsbin.com/avowu/edit
>> >>
>> >> Please use it now. It is extremely simple and it shows what is going
>> >> on inside jQuery, regarding : this.selector and this.context.
>> >>
>> >> So when I say: $("[name]", "#people"); I can (and you) can see that
>> >> inside jQuery selector (aka this.selector) is : "'#people[name]"
>> >>
>> >> So I am not "thinking" on this one I am just passing it on. This is
>> >> also very confusing:
>> >>
>> >> > Thinking that $("[name]", "#people"); is the same as
>> $("#people[name]");
>> >> > is wrong on multiple levels.
>> >>
>> >> This is how I understood jQuery documentation describes the context,
>> >> but this is not
>> >> apparently how this.selector value is defined inside ... This might be
>> >> "wrong on multiple levels" bi this is the value of this.selector , as
>> >> we can clearly see.
>> >>
>> >> Also you say :
>> >>
>> >> > $("[name]", $("#people")); actually means  $("#people [name]");
>> >>
>> >> Are you actually saying this is the proper usage? Ok, but why is than
>> >> the "improper" usage allowed? If it is imporper that is.  But the
>> >> question (for the last snippet) is what is then the value of the
>> >> this.slector going to be, when  used by a plugin ? Currently it is :
>> >> "#people [name]"
>> >>
>> >> Also, why are we in this mess ? Can we have consistent documentation
>> >> and implementation that is folllowing it?  Something like :
>> >>
>> >> "Context type can be a dom node or an jQuery instance. Everything else
>> >> throws an exeception if passed as a context to the jQuery() function"
>> >>
>> >> This would be a really good start to the discussion on what is
>> >> actually a "context" ;o)
>> >>
>> >> Regards.
>> >>
>> >>
>> >> 2009/3/25 Daniel Friesen <[email protected]>:
>> >> >
>> >> > Context is either a dom node, a document, or recently a jQuery object
>> >> > with the like. Context is merely used for establishing a dom node as
>> a
>> >> > parent, and in the case of a document is necessary to know what
>> document
>> >> > to use to create new nodes for.
>> >> > Thinking that $("[name]", "#people"); is the same as
>> $("#people[name]");
>> >> > is wrong on multiple levels. $("[name]", $("#people")); actually
>> means
>> >> > $("#people [name]"); and the contex is not meant to be used that way.
>> >> > In fact trying to think that way makes things confusing and reduces
>> code
>> >> > readability because you are mixing up order. If you want to build
>> >> > queries like this then I'd recommend you push for the inclusion of my
>> >> > alternate proposed format:
>> >> > $("#selector", "[selector]", ".selector", ...);
>> >> > Which makes proper sense since you are building up selectors in order
>> >> > (even has potential performance benefits if someone is adventurous
>> since
>> >> > I'd explicitly say to not rely on any consistent return for .end()
>> when
>> >> > using it). It's even more useful when you throw widget objects into
>> the
>> >> > mix.
>> >> >
>> >> > ~Daniel Friesen (Dantman, Nadir-Seen-Fire)
>> >> >
>> >> > DBJDBJ wrote:
>> >> >> My question/comment : What is a CONTEXT LOGIC in jQ ? I think it
>> >> >> should be : dom node inside which is the result set to be found?
>> >> >> The dom node inside which is jQuery to use the selector given.
>> Default
>> >> >> is document.
>> >> >>
>> >> >> If I read it right , jQ doc says that context type can be (only?)
>> dom
>> >> >> node or jQuery instance. So I expected that if I give context as a
>> >> >> string it will be takens as selector for the jQuery, which will
>> >> >> eventualy spill out a single dome node to be used as a context. And
>> >> >> that
>> >> >> way one can speed up her code, because querying inside the known dom
>> >> >> element must be quicker than querying inside the whole document,
>> each
>> >> >> time. finding on the branch is faster that finding from the root of
>> >> >> the tree.
>> >> >>
>> >> >> But it seems that if string is given as a context , the selector
>> get's
>> >> >> it as a prefix and context is a dom document ? So :
>> >> >>
>> >> >> $("[name]", "#people")    is the same as saying
>>  $("#people[name]",
>> >> >> document ) , because jQ makes it into this.
>> >> >>
>> >> >> While one might expect the above to be translated to :  $("[name]",
>> >> >> document.getElementById("people") ) , which could considerably speed
>> >> >> up the slection ...
>> >> >>
>> >> >> A quick sample I have made (quickly) is here:
>> >> >> http://jsbin.com/avowu/edit
>> >> >>
>> >> >> // context is correctly reported by jQ
>> >> >> $("[name]", document.getElementById("people")).formula( log ) ;
>> >> >>
>> >> >> // this.context is reported by jQ as HTMLDocument ?
>> >> >> // this.selector is prefixed with context
>> >> >> $("[name]", "#people") ;
>> >> >>
>> >> >> Is this "by design" ?  Maybe jQ does this :
>> >> >>
>> >> >> 1 :: jQuery("#people").find("[name]")
>> >> >> 2 :: this.context = "#people" + "[name]"
>> >> >>
>> >> >> So that plugins can see the context which actually was used ? So the
>> >> >> line :
>> >> >> $("[name]", "#people")
>> >> >> after all IS actually making things faster ? And I am (or I was)
>> >> >> confused with the value of this.context and this.selector, available
>> >> >> to me inside a plugin ? But then I think I can;t be right here,
>> >> >> because it would be much better to have the selector and context, as
>> >> >> originaly
>> >> >> given by the user :
>> >> >>
>> >> >> 1 :: this.context = "#people" ; this.selector = "[name]" ;
>> >> >> 2 :: jQuery(context).find(selector)
>> >> >>
>> >> >> After this plugins will see the original selector and context.
>> >> >> Provided my assumptions are correct.
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >> >
>> >> >>
>> >> >
>> >> > >
>> >> >
>> >>
>> >>
>> >>
>> >> --
>> >> Dusan Jovanovic
>> >> http://dbj.org
>> >> -------------------------
>> >> "html e-mail is expensive" ™
>> >>
>> >> This email originates from Dusan B. Jovanovic. It, and any
>> >> attachments, may contain confidential information and may be subject
>> >> to copyright or other intellectual property rights. It is only for the
>> >> use of the addressee(s). You may not copy, forward, disclose, save or
>> >> otherwise use it in any way if you are not the addressee(s) or
>> >> responsible for delivery. If you receive this email by mistake, please
>> >> advise the sender and cancel it immediately. Dusan B. Jovanovic may
>> >> monitor the content of emails within its network to ensure compliance
>> >> with its policies and procedures. Any email is susceptible to
>> >> alteration and its integrity cannot be assured. Dusan B. Jovanovic
>> >> shall not be liable if the message is altered, modified, falsified, or
>> >> edited.
>> >>
>> >>
>> >
>> >
>> > >
>> >
>>
>>
>>
>> --
>> Dusan Jovanovic
>> http://dbj.org
>> -------------------------
>> "html e-mail is expensive" ™
>>
>> This email originates from Dusan B. Jovanovic. It, and any
>> attachments, may contain confidential information and may be subject
>> to copyright or other intellectual property rights. It is only for the
>> use of the addressee(s). You may not copy, forward, disclose, save or
>> otherwise use it in any way if you are not the addressee(s) or
>> responsible for delivery. If you receive this email by mistake, please
>> advise the sender and cancel it immediately. Dusan B. Jovanovic may
>> monitor the content of emails within its network to ensure compliance
>> with its policies and procedures. Any email is susceptible to
>> alteration and its integrity cannot be assured. Dusan B. Jovanovic
>> shall not be liable if the message is altered, modified, falsified, or
>> edited.
>>
>>
>>
>
> >
>


-- 
Christopher Thatcher

--~--~---------~--~----~------------~-------~--~----~
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