A bit of rearranging of the code allowed me to achieve the same effect without havign to pass an elements array to filter as shown below:
elements = $('.globalClass'); elemsToAnimate = elements.not (unselectedArr); elementsToHide = elements.not (elemsToAnimate).not (':hidden'); elementsToShow = elementsToAnimate.filter (':hidden'); This works and according to firebug does give some speed increase (though not as much as I had hoped). Still, it is a little frustrating that filter() and not() can't handle the exact same types of arguments. On Jun 20, 7:07 pm, Gordon <[EMAIL PROTECTED]> wrote: > I'm trying to optimize some code that currently works by having one > function add a class to elements that meet certain criteria and > another function that applies effects to them based on the classes > attached. I found that adding and removing classes was relatively > slow so instead I want to build up an array of elements and use that > for filtering. > > I can't provide actual code because a) I'm working under an ND and b) > I'm at home now and it's all at work anyway, but basically in the > function that applies the effects I'd have something that was > functionally similar to this: > > elements = $('.globalClass'); > elementsToHide = elements.filter ('.unselected').not (':hidden'); > elemsToAnimate = elements.not ('.unselected'); > elementsToShow = elementsToAnimate.filter (':hidden'); > > // Do stuff > > elements.removeClass ('.unselected'); > > The functions that would decide what elements should be selected would > addClass ('unselected'). > > I am optimizing this code to run faster, and as DOM access can be > rather slow I decided that I would build an array of elements > instead. My first attempt involved building an array of strings, each > string being an element ID, and then using Array.join() to build a > query string for use in filtering. The logic portion was faster > because it was now just pushing vars onto an array, but the effects > functions took considerably longer to start because either the string > manipulation or using filter() and not() with long strings of element > IDs was slow. > > My second attempt to speed things up involved pushing getElementById > returns onto my array instead. I was hoping to use code along these > lines to access the array: > > elements = $('.globalClass'); > elementsToHide = elements.filter (unselectedArr).not (':hidden'); > elemsToAnimate = elements.not (unselectedArr); > elementsToShow = elementsToAnimate.filter (':hidden'); > > But because you don't seem to be able to pass arrays of elements to > filter it didn't work. > > On Jun 20, 6:10 pm, "John Resig" <[EMAIL PROTECTED]> wrote: > > > Can you provide an example of the code? I'm not sure what you're > > trying to do from your description. (If I had to guess, I'd say that > > you're trying to pass an element to filter, but I'm not sure why.) > > > --John > > > On 6/20/07, Gordon <[EMAIL PROTECTED]> wrote: > > > > If I build up a list of elements by pushing elements retrieved > > > getElementById onto an array and pass it to not() I can use this list > > > to filter out elements I don't want. But when I try the same thing > > > with filter() I get an error message: > > > > t.substring is not a function > > >http://localhost/js/jquery/jquery.js > > > Line 2659 > > > > I have tried this with both 1.1.2 and 1.1.3a and gotten the same > > > result (the error above was from 1.1.3a) > > > > >From what I understand filter and not work in a similar way, and that > > > not in fact uses filter to do its job. Is there a reason why I can > > > pass an array of elements to not but I can't pass one to filter?