Sorry for this, i've found the error the variable l is used in both
the for loop for elements and later down in the code.

On Sep 18, 4:56 pm, kangax <[EMAIL PROTECTED]> wrote:
> banry wrote:
> > I'm trying to convert some code from mootools to prototype, but I can
> > get the first ul to work but none of the others add the hover class on
> > mouseover. its got something to do with the call to
> > getElementBySelector - any help appreciated
>
> > Event.onDOMReady(function(){
>
> A prototype way would be:
> document.observe('dom:loaded', function(){
>   ...
>
> });
> > alert('DOM is loaded!');
> >    element = $('menu')
> >    if(!element.hasClassName('disabled')) {
> >            var menu = new JMenu(element)
> >            document.menu = menu
>
> Why not just:
> document.menu = new JMenu(element);
>
> >    };
> > });
>
> > var JMenu = Class.create();  // added pd
> >    JMenu.prototype = { // added pd
>
> Overwriting prototype property is not really necessary. Class.create
> already does this for you:
>
> Class.create({
>   initialize: function(){ ... },
>   ...
>
> });
>
> >            initialize: function(el){
> >                    var elements = el.getElementsBySelector('li');
>
> It's usually safer to extend element before using any prototypejs-
> specific methods. `getElementsBySelector` is also deprecated.
>
> var elements = $(el).select('li');
>
> >                    alert(elements.length);
> >                    var nested = null;
> >                    for (var i = 0; i < elements.length; i++) {
>
> If you're using plain `for(;;)`, then why not make it even faster by
> not calculating `length` every time:
>
> for (var i=0, l=elements.length; i<l; i++) {
>   ...
>
> }
> >                            var element = elements[i];
> >                              //alert(elements.length);
> >                            Event.observe(element, 'mouseover', function(){
> >                                    this.addClassName('hover');
> >                            });
> >                            Event.observe(element, 'mouseout', function(){
> >                                    this.removeClassName('hover');
> >                            });
>
> >                            //find nested UL
> >                            //nested = $E('ul', element);
> >                            nested = 
> > element.getElementsBySelector('ul').first;
>
> Did you want to get a first element in colleciton?
>
> nested = element.select('ul').first();
> // or even better
> nested = element.select('ul')[0];
>
> >                            if (!nested) {
> >                                    continue;
> >                            }
>
> >                            //declare width
> >                            var offsetWidth = 0;
>
> >                            //find longest child
> >                            for (k = 0; k < nested.childNodes.length; k++) {
> >                                    var node = nested.childNodes[k]
> >                                    if (node.nodeName == "LI")
>
> Would be safer to "normalize" tagName before comparison:
>
> if (node.nodeName.toLowerCase() === 'li') {
>   ...
>
> }
>
> [snip the rest of the code]
>
> Hope this helps.
>
> --
> kangax
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Prototype & script.aculo.us" group.
To post to this group, send email to prototype-scriptaculous@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to