just use:

var parent  = el.getParent();
return parent.hasClass('foo');

Or another nice one using reverse combinators:

$('test').getElement('!> .foo').setStyle('background', 'red');
http://www.jsfiddle.net/S2kGa/

Btw: why are you using the return App.parentWithClassVersoin3(parent,
className); seems like some unwanted recursion.


On Sat, Jan 8, 2011 at 10:26 PM, Philip Thompson <[email protected]>wrote:

> Hi all. I had a method that determined if an element's parent had a certain
> class, but it was too slow. I've gone through several iterations to find the
> most efficient, but it seems like it can be sped up even more. What am I
> doing wrong? and/or how can I have the most efficient method? I've included
> 3 versions here...
>
> <script>
> var App = {
>     parentWithClassVersion1: function (id, className) {
>         var el = document.id(id);
>         if (!el) { return false; }
>         return el.getParents().some(function (parent) {
>             if (parent.hasClass(className)) { return true; }
>         });
>     },
>     parentWithClassVersion2: function (id, className) {
>         var el = document.id(id);
>         if (!el) { return false; }
>         return !!el.getParents('[class*="'+className+'"]').length;
>     },
>     parentWithClassVersion3: function (id, className) {
>         var el = document.id(id);
>         if (!el) { return false; }
>         var parent = el.getParent();
>         if (!parent) { return false; }
>         if (parent.hasClass(className)) { return true; }
>         return App.parentWithClassVersion3(parent, className);
>     }
> };
> </script>
>
> Any help would be much appreciated!
>
> Thanks,
> ~Philip
>

Reply via email to