Перебор элементов в выделенных группах, как реализовать на JS?

  • Автор темы Автор темы Bmax77
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Bmax77

Участник
Топикстартер
Сообщения
58
Реакции
36
Суть вот в чем: нужно последовательно перебрать текстовые фреймы и сделать с ними кое что. Но эти фреймы входят или не входят в группы различной глубины вложенности. Как осуществить такой перебор? Я написал скрипт который перебирает все текстовые фреймы в документе и который перебирает выделенные. Но обычно фреймы сгруппированы с еще какими то объектами, а эти группы в свою очередь бывают тоже сгруппированы.
 
Ответ: Перебор элементов в выделенных группах, как реализовать на JS?

Как то так мне кажется. Массив myTTfr будут все текстовые фреймы
PHP:
function allTextFrames(_groups){
    if (_groups==null) {return}
	//alert(_groups.length)
    for (var i=0;i<_groups.length;i++){
		
             for (var j=0;j<_groups[i].textFrames.length;j++){myTTfr.push(_groups[i].textFrames[j])}
			if (_groups[i].groupItems!=null){allTextFrames(_groups[i].groupItems)}
        }
	return
    }
 
Ответ: Перебор элементов в выделенных группах, как реализовать на JS?

Если не трудно то можно комментарии по коду? И на мой взгляд, разную глубину вложенности групп он не переварит.
Спасибо.
 
Ответ: Перебор элементов в выделенных группах, как реализовать на JS?

Надо проверить, чуть позже. Пока занят.
 
Ответ: Перебор элементов в выделенных группах, как реализовать на JS?

Думаю надо перебрать все PageItems и выбрать из них те, у которых typename == TextFrame.

AirGraph.
 
Ответ: Перебор элементов в выделенных группах, как реализовать на JS?

Вот не хотелось бы перебирать все, а только те которые выбраны, в составе групп или сами по себе.
 
Ответ: Перебор элементов в выделенных группах, как реализовать на JS?

А что это меняет? У каждого GroupItem есть pageItems. Просто перебираем объекты в selection, а не в документе. Думаю, что pageItems самой внешней группы вернет все объекты всех групп, будь то GroupItems, TextFrames, etc.
Если оно не так - строим реентерабельную процедуру, разматывающую коллекцию матрешек групп. Это простая функция с одним параметром - GroupItem, которая ищет в группе TextFrame и GroupItem. Первые добавляет во внешний массив, а когда находит группу - тупо вызывает сама себя с найденной группой в качестве параметра.

AirGraph.
 
Ответ: Перебор элементов в выделенных группах, как реализовать на JS?

Вроде как работает, хотя я думаю, что AirGraph более верное направление сказал.
См комментарии
PHP:
var mySel=app.selection
var myTTfr=[] // массив текстовых фреймов
allTextFrames(mySel)
function allTextFrames(_groups){ // рекурсивная функция поиска текстовых фреймов
    if (_groups==null) {return} // если ничего не передано выход
    for (var i=0;i<_groups.length;i++){ // цикл по всем элементам входящего массива
             for (var j=0;j<_groups[i].textFrames.length;j++){myTTfr.push(_groups[i].textFrames[j])} // цикл по всем текстовым  фреймам и добвление их в массив
			 if (_groups[i].groupItems!=null){allTextFrames(_groups[i].groupItems)} // если в данном элементе вх массива есть группы, то запускается эта же функция
        }
    return
    }  
    alert(myTTfr.length)
 
Ответ: Перебор элементов в выделенных группах, как реализовать на JS?

to dik973
Спасибо за код. попробую вникнуть. Но пока решил проблему другим путем: все текстовые фреймы имеющиеся в документе в массив и потом отбор только тех у которых selected == true, способ работает с любыми вариантами группирования, количеством групп и отдельных элементов.
 
Статус
Закрыто для дальнейших ответов.