That's the one I support. We'll see :)

On Tue, Dec 2, 2008 at 1:18 PM, Diogo Baeder <[EMAIL PROTECTED]> wrote:
> Alright... agreed! :-) Well, the code's fast nonetheless, so may we go on
> with "parentNode" and "nodeType == 9" implementation, then?
>
> Diogo
>
>
>
> On Tue, Dec 2, 2008 at 2:05 PM, Ariel Flesler <[EMAIL PROTECTED]> wrote:
>>
>> It's not bytes amount vs perfomance, but usability vs perfomance.
>>
>> Using Diego Perini's approach would add support for iframes and xml
>> documents.
>>
>> On Tue, Dec 2, 2008 at 1:03 PM, Diogo Baeder <[EMAIL PROTECTED]>
>> wrote:
>> > Got your point, Ariel... well, for me both solutions (faster with more
>> > code
>> > or slower with less code) are feasible and have bad+good points. It's up
>> > to
>> > you, guys, to pick up one... personally, I don't favor one or another...
>> > what is more important for you? Less bandwith usage or better
>> > performance?
>> > Since the main ideology for jQuery is "do more writing less code", it
>> > wouldn't impact its clients...
>> >
>> > I just tested this last implementation on IE7, IE6, FF3, Opera 9.62 and
>> > Safari 3.1.2, and it worked on them all. :-)
>> >
>> > Diogo
>> >
>> >
>> >
>> > On Tue, Dec 2, 2008 at 12:41 PM, Ariel Flesler <[EMAIL PROTECTED]>
>> > wrote:
>> >>
>> >> I'd just save it as a local var
>> >>
>> >> var html = document.documentElement;
>> >> $.fn.inDOM = html.contains ?
>> >>        function() {
>> >>            var el = this[0];
>> >>            return html != el && $.html.contains(el);
>> >>        } :
>> >>        function() {
>> >>            var el = this[0];
>> >>            return !!(html.compareDocumentPosition(el) & 16);
>> >>        };
>> >>
>> >> Does this work reliably on any browser ?
>> >> Note that his doesn't work for any document that is not THE document.
>> >>
>> >> I think a simple traversal (going up) would do. I'm sorry to spoil all
>> >> the researching but no one said this function will be used everywhere
>> >> and it needs to be as fast as possible. First it most be effective,
>> >> then efficient.
>> >>
>> >> On Tue, Dec 2, 2008 at 12:07 PM, Diogo Baeder <[EMAIL PROTECTED]>
>> >> wrote:
>> >> > Thanks!
>> >> >
>> >> > Guys, the last proposal gave me about 140ms ~ 150ms within 1000
>> >> > method
>> >> > calls, but here's something that gave me about 80ms ~ 90ms:
>> >> >
>> >> >
>> >> >     $.htmlEl = $('html').get(0);
>> >> >     $.fn.inDOM = $.htmlEl.contains ?
>> >> >         function() {
>> >> >             var el = this[0];
>> >> >             return $.htmlEl != el && $.htmlEl.contains(el);
>> >> >         } :
>> >> >         function() {
>> >> >             var el = this[0];
>> >> >             return !!($.htmlEl.compareDocumentPosition(el) & 16);
>> >> >         };
>> >> >
>> >> > What do you think of it? A little bit more of coding, but
>> >> > considerably
>> >> > faster... despite someone would rarely make so much calls to this
>> >> > method, I
>> >> > think...
>> >> >
>> >> > Diogo
>> >> >
>> >> >
>> >> >
>> >> > On Mon, Dec 1, 2008 at 10:36 PM, Diego Perini
>> >> > <[EMAIL PROTECTED]>
>> >> > wrote:
>> >> >>
>> >> >> Diogo,
>> >> >>
>> >> >> On 1 Dic, 21:56, "Diogo Baeder" <[EMAIL PROTECTED]> wrote:
>> >> >> > Thank you, guys... I tried the last method as implemented/adapted
>> >> >> > by
>> >> >> > Diego,
>> >> >> > and it works! :-)
>> >> >> >
>> >> >> > Unfortunately, neither "contains" nor "compareDocumentPosition"
>> >> >> > are
>> >> >> > being
>> >> >> > recognized as methods for the "document" node in IE6 or 7, as you
>> >> >> > can
>> >> >> > test
>> >> >> > yourselves:
>> >> >> >
>> >> >> > alert(document.contains);
>> >> >> > alert(window.contains);
>> >> >> > alert(document.compareDocumentPosition);
>> >> >> > alert(window.compareDocumentPosition);
>> >> >> >
>> >> >> > Any ideas why these didn't work for me?
>> >> >> >
>> >> >>
>> >> >> The Microsoft "contains" method does not exists for the document
>> >> >> object (at least in the docs). Maybe because it is not an element
>> >> >> (nodeType == 1).
>> >> >>
>> >> >> Firefox and Opera implement the "compareDocumentPosition" method,
>> >> >> also
>> >> >> they made it a method of the "document" itself.
>> >> >>
>> >> >> Opera implements both "compareDocumentPosition" and "contains",
>> >> >> Safari
>> >> >> only has "contains" again not on the "document".
>> >> >>
>> >> >> The conclusion is that the implementations of
>> >> >> "compareDocumentPosition
>> >> >> ()" and "contains()" disagree on this specific fact.
>> >> >>
>> >> >> At this point, given the messed up implementations, better being
>> >> >> independent from them both and go for the traversal.
>> >> >>
>> >> >> It is also much shorter and really cross-browser...
>> >> >>
>> >> >> --
>> >> >> Diego
>> >> >>
>> >> >>
>> >> >> > Diogo
>> >> >> >
>> >> >> > On Mon, Dec 1, 2008 at 10:58 AM, Diego Perini
>> >> >> > <[EMAIL PROTECTED]>wrote:
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> > > ricardo,
>> >> >> >
>> >> >> > > On 1 Dic, 05:35, ricardobeat <[EMAIL PROTECTED]> wrote:
>> >> >> > > > I always miss the obvious stuff :)
>> >> >> >
>> >> >> > > > I ended up with this, it's a lot faster than Diogo's code but
>> >> >> > > > still
>> >> >> > > > requires you to traverse the document all the way up. John
>> >> >> > > > Resig's
>> >> >> > > > 'contains' function is at least twice faster in FF though, so
>> >> >> > > > it
>> >> >> > > > seems
>> >> >> > > > like the perfect solution.
>> >> >> >
>> >> >> > > > $.fn.inDOM = function(){
>> >> >> > > >    var el = this[0];
>> >> >> > > >    while (el.parentNode) el = el.parentNode;
>> >> >> > > >    return el == this[0].ownerDocument;
>> >> >> >
>> >> >> > > > };
>> >> >> >
>> >> >> > > To make it less dependent:
>> >> >> >
>> >> >> > > $.fn.inDOM = function(){
>> >> >> > >   var el = this[0];
>> >> >> > >   while (el.parentNode) el = el.parentNode;
>> >> >> > >    return el.nodeType == 9;
>> >> >> > > };
>> >> >> >
>> >> >> > > now you can also pass elements present in other DOM contexts.
>> >> >> >
>> >> >> > > Don't know if this modifies the intended usage, this will most
>> >> >> > > generally tell if the element is an orphan (not attached to any
>> >> >> > > document).
>> >> >> >
>> >> >> > > To account for both usages, it will be necessary to pass context
>> >> >> > > information (an extra parameter to specify the desired context).
>> >> >> >
>> >> >> > > --
>> >> >> > > Diego
>> >> >> >
>> >> >> > > > - ricardo
>> >> >> >
>> >> >> > > > On 30 nov, 19:43, "Ariel Flesler" <[EMAIL PROTECTED]> wrote:
>> >> >> >
>> >> >> > > > > Yeah, parentNode is not good enough.
>> >> >> >
>> >> >> > > > > On Sun, Nov 30, 2008 at 4:35 PM, ricardobeat
>> >> >> > > > > <[EMAIL PROTECTED]>
>> >> >> > > wrote:
>> >> >> >
>> >> >> > > > > > Hi,
>> >> >> >
>> >> >> > > > > > It seems the ownerDocument is set for the created element
>> >> >> > > > > > even
>> >> >> > > > > > if
>> >> >> > > it's
>> >> >> > > > > > not in the DOM, it's the document where jQuery was loaded
>> >> >> > > > > > in.
>> >> >> > > > > > A
>> >> >> > > simple
>> >> >> > > > > > check for parentNode or offsetParent would do:
>> >> >> >
>> >> >> > > > > > $.fn.inDOM = function(){
>> >> >> > > > > >     return !!this.parentNode; //boolean
>> >> >> > > > > > });
>> >> >> >
>> >> >> > > > > > parentNode returns faster for elements in the DOM, while
>> >> >> > > > > > offsetParent
>> >> >> > > > > > returns faster for elements not in the DOM (in FF3 at
>> >> >> > > > > > least).
>> >> >> >
>> >> >> > > > > > Hope I'm not missing anything. It surely would need a
>> >> >> > > > > > better
>> >> >> > > > > > name :]
>> >> >> >
>> >> >> > > > > > cheers,
>> >> >> > > > > > - ricardo
>> >> >> > > > > > On 29 nov, 14:46, Ariel Flesler <[EMAIL PROTECTED]>
>> >> >> > > > > > wrote:
>> >> >> > > > > >> 'body' should be replaced by 'html'.
>> >> >> >
>> >> >> > > > > >> Maybe we can make it faster by consulting expandos like
>> >> >> > > > > >> ownerDocument ?
>> >> >> >
>> >> >> > > > > >> --
>> >> >> > > > > >> Ariel Fleslerhttp://flesler.blogspot.com
>> >> >> >
>> >> >> > > > > >> On Nov 27, 12:52 am, diogobaeder <[EMAIL PROTECTED]>
>> >> >> > > > > >> wrote:
>> >> >> >
>> >> >> > > > > >> > Hi there,
>> >> >> >
>> >> >> > > > > >> > I'm new here (and in jQuery), but even though I'd like
>> >> >> > > > > >> > to
>> >> >> > > > > >> > propose
>> >> >> > > some
>> >> >> > > > > >> > simple but usefull method to the jQuery object (at
>> >> >> > > > > >> > core.js)
>> >> >> > > > > >> > to
>> >> >> > > tell
>> >> >> > > > > >> > the API user if an element exists in the document. I've
>> >> >> > > > > >> > tried
>> >> >> > > > > >> > to
>> >> >> > > build
>> >> >> > > > > >> > one as follows:
>> >> >> >
>> >> >> > > > > >> > [CODE]
>> >> >> > > > > >> > (function($) {
>> >> >> >
>> >> >> > > > > >> >     $.fn.inDOM = function() {
>> >> >> > > > > >> >         return !!this.parents('body').length;
>> >> >> > > > > >> >     };
>> >> >> >
>> >> >> > > > > >> > })(jQuery);
>> >> >> >
>> >> >> > > > > >> > jQuery(document).ready(function(){
>> >> >> > > > > >> >     var jEl = $('.someExistingClass');
>> >> >> >
>> >> >> > > > > >> >     // Should be in DOM
>> >> >> > > > > >> >     console.debug(jEl.inDOM());
>> >> >> >
>> >> >> > > > > >> >     // Removing the element
>> >> >> > > > > >> >     jEl.remove();
>> >> >> >
>> >> >> > > > > >> >     // Should NOT be in DOM
>> >> >> > > > > >> >     console.debug(jEl.inDOM());});
>> >> >> >
>> >> >> > > > > >> > [/CODE]
>> >> >> >
>> >> >> > > > > >> > So, if the client sets a variable as a jQuery object,
>> >> >> > > > > >> > and
>> >> >> > > > > >> > at
>> >> >> > > > > >> > some
>> >> >> > > > > >> > point of the code the DOM element within it can be
>> >> >> > > > > >> > removed,
>> >> >> > > > > >> > he/she
>> >> >> > > can
>> >> >> > > > > >> > test if it really was. OK, I know it sounds
>> >> >> > > > > >> > unsignificant,
>> >> >> > > > > >> > but I
>> >> >> > > think
>> >> >> > > > > >> > it would still be usefull.
>> >> >> >
>> >> >> > > > > >> > Thanks!
>> >> >> >
>> >> >> > > > > >> > Diogo Baeder
>> >> >> >
>> >> >> > > > > --
>> >> >> > > > > Ariel Fleslerhttp://flesler.blogspot.com
>> >> >> >
>> >> >> > --
>> >> >> > Diogo Baederhttp://www.diogobaeder.com.br
>> >> >>
>> >> >
>> >> >
>> >> >
>> >> > --
>> >> > Diogo Baeder
>> >> > http://www.diogobaeder.com.br
>> >> >
>> >> > >
>> >> >
>> >>
>> >>
>> >>
>> >> --
>> >> Ariel Flesler
>> >> http://flesler.blogspot.com
>> >>
>> >>
>> >
>> >
>> >
>> > --
>> > Diogo Baeder
>> > http://www.diogobaeder.com.br
>> >
>> > >
>> >
>>
>>
>>
>> --
>> Ariel Flesler
>> http://flesler.blogspot.com
>>
>>
>
>
>
> --
> Diogo Baeder
> http://www.diogobaeder.com.br
>
> >
>



-- 
Ariel Flesler
http://flesler.blogspot.com

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