Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Javascript > Firefox DOM -- offsetParent vs parentNode

Reply
Thread Tools

Firefox DOM -- offsetParent vs parentNode

 
 
amattie@gmail.com
Guest
Posts: n/a
 
      10-27-2006
Anyone know what the specific difference is between the offsetParent
and parentNode properties of a DOM element are?

Mozilla's docs on the DOM element
(http://developer.mozilla.org/en/docs/DOM:element) don't really
indicate much of a difference, but whatever the difference is is really
screwing me up in one of my projects. On a specific div node nested
within a whole bunch of other div nodes in the DOM, the parentNode
property evaluates to the actual parent node, whereas offsetParent
evaluates to null. This doesn't really affect me, but when I go to
clone the node to append it to clone's real parent for another purpose,
the parentNode of the new clone node remains the actual parent I
appended it to whereas the offsetParent becomes the HTML body element!
(Also, just so you know, I checked the parentNode / offsetParent before
I cloned it to make sure it wasn't a problem with the clone procedure.)

The reason I need the offsetParent instead of the parentNode is because
offsetTop for each of my new cloned nodes is screwed up. Because
offsetParent is the body node, offsetTop gives me the pixel count
between the top of the browser and the element itself. I need the
offsetTop of the container element, the _real_ parent node.

There's nothing really special about this node as far as I can tell.
I'm using FF 1.5.0.7 and a XHTML 1.0 transitional doctype. I haven't
tested any other elements on the DOM for this weird behaviour, and I
haven't tried it in other browsers yet. I've done things similar to
this before though, and I've never had problems with it. Any ideas of
how I can fix this problem, or where I can look for more info? Thanks.

Andrew

 
Reply With Quote
 
 
 
 
Michael Winter
Guest
Posts: n/a
 
      10-27-2006
http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:

> Anyone know what the specific difference is between the offsetParent
> and parentNode properties of a DOM element are?


The offsetParent property refers to the nearest positioned (non-static)
ancestor element. If there is no such element, offsetParent will refer
to the body element[1].

Consider the following fragment:

<body>
<div>
<p>Lorum ipsum...</p>
</div>

<div style="position: relative;">
<p>Lorum ipsum...</p>
</div>
</body>

The offsetParent property of the first paragraph will refer to the body
element. There are no positioned ancestor elements, so that default is
used. In the second case, the offsetParent property will refer to the
div element as that is positioned. Here, the div element is the parent,
but it doesn't have to be.

> Mozilla's docs on the DOM element
> (http://developer.mozilla.org/en/docs/DOM:element) don't really
> indicate much of a difference ...


That particular document doesn't, but the actual description of the
property[2] does.

> On a specific div node nested within a whole bunch of other div nodes
> in the DOM, the parentNode property evaluates to the actual parent
> node, whereas offsetParent evaluates to null.


I can't say I've seen that before. Can you post a link to a small
demonstration?

> This doesn't really affect me, but when I go to clone the node to
> append it to clone's real parent for another purpose, the parentNode
> of the new clone node remains the actual parent I appended it to
> whereas the offsetParent becomes the HTML body element!


Unless there is a positioned ancestor, that should be expected.

[snip]

> I'm using FF 1.5.0.7 and a XHTML 1.0 transitional doctype.


<aside>
Serving XHTML to clients is typically pointless. Doubly so if the
Transitional document type is used. The latter should be avoided (if at
all possible, and it usually is) even for HTML.
</>

[snip]

Mike


[1] The Mozilla documentation indicates that it should be the
root element, but this doesn't seem to be the case in
practice most likely because MSIE uses the body element.
[2] <http://developer.mozilla.org/en/docs/DOM:element.offsetParent>
 
Reply With Quote
 
 
 
 
amattie@gmail.com
Guest
Posts: n/a
 
      10-27-2006
Well, that solved my problem. I actually had read the wiki pages for
those properties, but for whatever reason I just ignored the whole
"relative positioned parent" thing and hadn't even tried what you
suggested before I posted. I don't remember having to set position:
relative when I did that before, but I guess I must have.

Also, after trying that, I found out that my problem with having a null
offsetParent and the "real" parentNode was that the parent's parent had
display: none set on it. I removed the display: none later in the
script before I started cloning nodes and all, but I was erraneously
eval'ing the parentNode / offsetParent before I set display: block on
the container element. Therefore, the offsetParent was null and the
parentNode was the "real" node at that time.

Anyway, thanks for the help!

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Definition/Standard for DOM node property offsetParent Patient Guy Javascript 5 11-23-2008 05:37 AM
Firefox offsetParent woes Geoffrey Summerhayes Javascript 7 02-13-2008 06:56 AM
No offsetParent in Firefox? webEater Javascript 5 12-21-2006 11:29 AM
Safari offsetParent/offsetLeft Problem! ara.pehlivanian@gmail.com Javascript 3 01-13-2005 11:12 PM
div - position - offsetParent Vittore Zen Javascript 1 11-04-2004 11:55 AM



Advertisments