andibra
andibra

Reputation: 153

Flex AS3 : Find and remove elements from container of certain class

How can I remove only every image found in a Bordercontainer which also holds Textinputs and Buttons ?

i tried:

for(var i:int=0;i<container.numElements;i++){
if(container.getElementAt(i) is Image){
container.removeElementAt(i);}
}

But as expected this loop does not fully work since the numElements changes which means that not all Images get removed. I know there is some simple trick to this...but I cant think of it right now...Please help

Upvotes: 2

Views: 3184

Answers (2)

pho
pho

Reputation: 25489

Looping backwards would be 1 way to do this.

Another would be

for(var i:int=0; i<container.numElements; i++){
    if(container.getElementAt(i) is Image){
        container.removeElementAt(i);
        i--; //This nullifies the effect of removing an element
    }
}

Upvotes: 1

JeffryHouser
JeffryHouser

Reputation: 39408

As commenters have suggested, it seems like looping backwards would be the way to do it. I'd try something like this:

var totalElements : int = container.numElements;
for(var i:int=totalElements-1;i>=0;i--){
 if(container.getElementAt(i) is Image){
  container.removeElementAt(i);
 }
}

By storing the numElements in a variable before starting the loop, you can be sure that the value will not change while processing the loop. Since your going backwards, you don't have to worry about the child index changing.

A second option would be to queue up the image instances in one loop and remove them in a second loop using the removeElement method. I suspect the two loop method will have significantly worse performance.

Upvotes: 3

Related Questions