Flex AS3: поиск и удаление элементов из контейнера определенного класса - PullRequest
2 голосов
/ 25 ноября 2011

Как я могу удалить только каждое изображение, найденное в Bordercontainer, который также содержит текстовые входы и кнопки?

я пробовал:

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

Но, как и ожидалось, этот цикл работает не полностью, так как изменяется numElements, что означает, что удаляются не все изображения. Я знаю, что в этом есть какой-то простой трюк ... но я не могу сейчас об этом думать ... Пожалуйста, помогите

Ответы [ 2 ]

3 голосов
/ 25 ноября 2011

Как отметили комментаторы, похоже, что цикл назад может быть способом сделать это. Я бы попробовал что-то вроде этого:

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

Сохраняя numElements в переменной до запуска цикла, вы можете быть уверены, что значение не изменится при обработке цикла. Поскольку вы идете назад, вам не нужно беспокоиться об изменении дочернего индекса.

Второй вариант - поставить экземпляры изображений в очередь в один цикл и удалить их во втором цикле, используя метод removeElement. Я подозреваю, что двухконтурный метод будет иметь значительно худшую производительность.

1 голос
/ 25 ноября 2011

Зацикливание в обратном направлении было бы 1 способом сделать это.

Другим было бы

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
    }
}
...