RE: Re: which is faster target.getElementsByTagName or target.firstChild / nextSibli
"Cory Smith" <[email protected]> Fri, 7 Apr 2006 09:12:09 -0700
| Newsgroups | gmane.comp.web.dom.wdf |
|---|---|
| Message-ID | <[email protected]> |
Not quite on topic, but you might also want to consider the use of
bubbling the event, to avoid the BUFL.
It might go a little something like this:
function rollout(e){
var cn = this.className;
this.className = cn.slice(0,cn.indexOf(' open'));
this.onmouseout = null;
}
function rollover(e){
//cross browser event stuff
e = e || window.event;
var target = e.target || e.srcElement;
if(target.className == 'm1'){//filter the event by some
identifier
target.className += ' open';
target.onmouseout = rollout;
}
}
window.onload = function(){
document.getElementById('navigation').onmouseover =
rollover;
}
With markup that looks a little like this:
<ul id="navigation">
<li class="m1">Menu Item
<ul>
<li><a href="#">Menu Item</a></li>
</ul>
</li>
</ul>
And css:
ul li.m1 ul {
display:none;
}
body ul li.open ul {
display:block;
}
Saves all the parsing time at start, but it can be a little tricky with
the event filtering.
Cory
-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf
Of becs027
Sent: Thursday, April 06, 2006 7:01 PM
To: [email protected]
Subject: [wdf-dom] Re: which is faster target.getElementsByTagName or
target.firstChild / nextSibli
Thanks. I get weird results, and had to change the timediff bit a little
to get a result, I used:
var nTimeDiff = dEnd.getMilliseconds() - dStart.getMilliseconds();
In Firefox 1.5:
getElementsByTagName took 313ms
firstChild / nextSibling took 516ms
In Internet Explorer 6:
getElementsByTagName took 265ms
firstChild / nextSibling took 156ms
So looks like it depends on the browser. My function is only for IE
which helps :)
Cheers
Rebecca
--- In [email protected], "Ryan Hicks" <ryan.c.hicks@...> wrote:
>
> Rebecca,
>
> My vote would likely be for the getElementsByTagName, simply
because the
> conditional in the other option would have to reference the DOM an
> additional time for each iteration.
>
> However, votes aside, you can always test the amount of time your
> code takes to execute by doing something like the following:
>
> var dStart = new Date();
>
> ...chunk of code...
>
> var dEnd = new Date();
> var nTimeDiff = dEnd.getDate() - dStart.getDate(); alert('Execution
> time: ' + nTimeDiff + 'ms');
>
> Without having your actual DOM, I can't test these two scenarios to
verify
> if my vote is correct. If you find that this technique gets you an
answer,
> I'd love to know which version wins out!
>
> -ryan
>
> -----Original Message-----
> From: [email protected] [mailto:[email protected]] On
Behalf Of
> becs027
> Sent: Thursday, April 06, 2006 4:44 PM
> To: [email protected]
> Subject: [wdf-dom] which is faster target.getElementsByTagName or
> target.firstChild / nextSibling
>
> Hi all,
>
> I'm doing an onload script to add rollover behaviour to list items
> (dropdown menu style) for IE, and want to check which of two ways is
> faster.
>
> ------------------------------------------------
>
> Option 1 - add the behaviour using target.getElementsByTagName:
>
> if (document.getElementById('navigation')) {
> var target = document.getElementById('navigation');
> var targetbuttons = target.getElementsByTagName('li');
>
> for (var i = 0; i < targetbuttons.length; i++) {
> targetbuttons[i].onmouseover = rollover;
> targetbuttons[i].onmouseout = rolloff;
> }
> }
>
> ------------------------------------------------
>
> Option 2 - add the behaviour with a while loop using firstChild,
> nextSibling:
>
> if (document.getElementById('navigation')) {
> var target = document.getElementById('navigation');
> var targetbutton = target.firstChild;
>
> while (targetbutton) {
> targetbutton.onmouseover = rollover;
> targetbutton.onmouseout = rolloff;
> targetbutton = targetbutton.nextSibling;
> }
> }
>
> ------------------------------------------------
>
> Thanks :)
> Rebecca
>
>
>
>
>
> Unsubscribe
> [email protected]
>
> List info
> http://www.quirksmode.org/dom/list.html
> Yahoo! Groups Links
>
Unsubscribe
[email protected]
List info
http://www.quirksmode.org/dom/list.html
Yahoo! Groups Links
Unsubscribe
[email protected]
List info
http://www.quirksmode.org/dom/list.html
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/wdf-dom/
<*> To unsubscribe from this group, send an email to:
[email protected]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/