[ID CS4-CS6] Selection Paragraph ломается после цикла.

Vadim_PDF

Топикстартер
15 лет на форуме
Сообщения
1 648
Реакции
237
Простой код - удалить все абзацы кроме таблиц
после первого прохода (удаление первого параграфа) цикла mySelection меняется и объект параграф становиться неактуальным (я так понял).

aaaa-png.99672



Вопрос -как избежать такого поведения?

Код:
var mySelection = app.activeDocument.selection[0];

for (var i = mySelection.paragraphs.length-1; i > 0 ; i--){
    var aa = mySelection.paragraphs[i];
    var aaa  = aa.tables.length;

    if (aa.tables.length == 0){
        aa.remove();

    }
}
 

Вложения

  • aaaa.png
    aaaa.png
    9.4 КБ · Просм.: 971

Oleg Butrin

15 лет на форуме
Сообщения
1 968
Реакции
1 202
Не надо удалять объекты при обходе. Лучше примерно так:
Код:
var mySelection = app.activeDocument.selection[0];

var remPara = [];

for (var i = 0; i < mySelection.paragraphs.length; i++) {
    var para = mySelection.paragraphs[i];
    if (para.tables.length == 0) {
        remPara.push(para);
    }
}

remPara.reverse();

for (var i = 0; i < remPara.length; i++) {
    remPara[i].remove();
}
 
  • Спасибо
Реакции: Vadim_PDF

Skvoznyak

15 лет на форуме
Сообщения
5 478
Реакции
2 158
Для начала разобраться что в selection, и почему берется selection[0]
Ну еще факультативно правило про тся и ться можно изучить, мне казалось в 5 классе что оно не очень сложное
 
  • Спасибо
Реакции: ~RA~

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
32 309
Реакции
10 591
Удалять что-то в одном и том же цикле с проверкой - примерно то же самое, что рубить сук, на котором сидишь.
 
  • Спасибо
Реакции: ~RA~

MT

15 лет на форуме
Сообщения
246
Реакции
93
У вас не обрабатывается i =0;
Подправьте цикл и все сработает
Код:
for (var i = mySelection.paragraphs.length-1; i >= 0 ; i--)
 
  • Спасибо
Реакции: Skvoznyak

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
32 309
Реакции
10 591
Топиковый случай - контрпример
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
32 309
Реакции
10 591
Какая разница? У топикстартера цикл с конца, структура ломается при первом удалении, до начала не доходит.
 

Skvoznyak

15 лет на форуме
Сообщения
5 478
Реакции
2 158
вот слева начальный вариант, справа после обработки. что сломалось?

я же говорю - вопрос еще в том, что там выделено.
 

Вложения

  • Screenshot 2017-11-05 18.51.43.png
    Screenshot 2017-11-05 18.51.43.png
    11.5 КБ · Просм.: 672

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
32 309
Реакции
10 591
Я не моделировал ситуацию, но верю топикстартеру на слово. И Олегу тоже ;)