Javascript 在InDesign CS6中选择组内的文本帧

Javascript 在InDesign CS6中选择组内的文本帧,javascript,adobe-indesign,extendscript,Javascript,Adobe Indesign,Extendscript,类似于我以前在基于页面几何边界或部分名称的页面上查找文本框时遇到的问题,我现在遇到了在组内查找文本框的问题。如果我使用所有文本框的数组,例如: var textFramesArray = document.textFrames.everyItem().getElements(); 它将找不到组内的任何文本框。如果文本框位于组中,我如何确定如何引用该文本框?即使该组必须取消分组,也没关系,但我甚至不知道如何在页面上查找组 试试这个: // this script needs: // - a do

类似于我以前在基于页面几何边界或部分名称的页面上查找文本框时遇到的问题,我现在遇到了在组内查找文本框的问题。如果我使用所有文本框的数组,例如:

var textFramesArray = document.textFrames.everyItem().getElements();
它将找不到组内的任何文本框。如果文本框位于组中,我如何确定如何引用该文本框?即使该组必须取消分组,也没关系,但我甚至不知道如何在页面上查找组

试试这个:

// this script needs:
// - a document with one page
// - some groups with textframes in it on the first page

var pg = app.activeDocument.pages[0];
var groups = pg.groups;

var tf_ingroup_counter = 0;
for(var g = 0; g < groups.length;g++){
    var grp = groups[g];

        for(var t = 0; t < grp.textFrames.length;t++){
            var tf = grp.textFrames[t];
                if(tf instanceof TextFrame){
                    tf_ingroup_counter++;
                    }             
        }
    }

alert("I found on page " + pg.name +"\n" + pg.textFrames.length 
            +" textframes\nOh and there are also "
            +tf_ingroup_counter+ " hidden in groups");
//此脚本需要:
//-一页文件
//-某些组在第一页上有文本框
var pg=app.activeDocument.pages[0];
var组=pg组;
var tf_ingroup_计数器=0;
对于(var g=0;g
页面上的组是
页面。组。。。但你无论如何都不需要这个。Fabian的答案是好的,但它没有考虑到分组中的分组——也没有剪裁遮罩,也没有表格和脚注中的文本框(等等)

这里有一种替代方法:
allPageItems
几乎可以保证返回所有页面项目,无论是在组内还是在其他框架内,还是在其他任何情况下,都可以返回各种类型和说服力的页面项目。您可以依次检查、处理每个文本框,或构建一组文本框,以便在空闲时使用:

allframes = app.activeDocument.allPageItems;
textframes = [];
for (i=0; i<allframes.length; i++)
{
    if (allframes[i] instanceof TextFrame)
        textframes.push(allframes[i]);
}
alert (textframes.length);
allframes=app.activeDocument.allPageItems;
textframes=[];

对于(i=0;i您的任务,获取层或文档中的所有文本框。无论这些文本框是否在一个组中。这是通过
allPageItems
的属性完成的。例如,使用以下方法:-

var items=app.activeDocument.allPageItems;
这将为您提供项目和组内的所有文本框。现在您可以执行任何操作。您可以在调试控制台上检查
项目
,该控制台将提供所有类型的对象。然后您可以检查文本框

items[i].constructor.name =='TextFrame'

现在,您可以将每个对象存储在类型数组中。

这似乎是一种更好的方法,因为它可以在组中递归地获取textframes以及其他textframes。