Hi Diogo,
Just wondering if that first line could be shortened to this:
$.htmlEl = $('html')[0];
Or if it would be faster done with this:
$.htmlEl = document.documentElement;
Not sure about the implications of that one, but thought I'd throw it
out there.
On Dec 2, 2008, at 9:07 AM, Diogo Baeder 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
>
> >
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---