Hi, guys,
Updated the jqbench repository for performance tests between "inDOM"
proposals using "parentNode" and "parents('html')". Using "parentNode" and
testing the "nodeType" it performed approximately 3 times faster! :-)
So, it seems like this is the fastest implementation so far:
var el = this[0];
while (el.parentNode) el = el.parentNode;
return el.nodeType == 9;
Thank you, guys!
Diogo
On Mon, Dec 1, 2008 at 6:56 PM, 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?
>
> 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 Baeder
> http://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
-~----------~----~----~----~------~----~------~--~---