我正在使用Adobe InDesign和ExtendScript来查找使用app.activeDocument.findGrep()
的关键字,而且我的这部分工作得很好。我知道findGrep()
返回一个Text对象数组。假设我想使用第一个结果:
var result = app.activeDocument.findGrep()[0];
如何在result
之后获得下一段?
答案 0 :(得分:2)
var nextParagraph = result.paragraphs[-1].insertionPoints[-1].paragraphs[-1];
Indesign DOM具有不同的Text对象,可用于处理段落,单词,字符或插入点(闪烁光标所在的字符之间的空间)。一组Text对象称为集合。 Indesign中的集合类似于数组,但一个显着的区别是它们可以通过使用负索引(paragraphs[-1]
)从后面解决。
result
指的是findGrep()结果。它可以是任何Text对象,具体取决于您的搜索条件。
paragraphs[-1]
表示结果的最后一段(A段)。如果搜索结果只是一个单词,那么这将引用单词的封闭段落,而这个段落集合只有一个元素。
insertionPoints[-1]
引用段落A的最后一个插入点。在段落标记之后在之前下一段的第一个字符(段落B) 。此插入点属于以下段落的和段。
paragraphs[-1]
返回insertedPoint的最后一段,即段落B(下一段)。
答案 1 :(得分:1)
Althouh nextItem似乎完全合适且高效,它可能是性能泄漏的来源,特别是如果你在一个巨大的循环中多次调用它。请记住,nextItem()是一个创建内部范围和东西的函数...... 另一种方法是在故事中导航并通过insertPoints indeces来到达下一段:
var main = function() {
var doc, found, st, pCurr, pNext, ipNext, ps;
if (!app.documents.length) return;
doc = app.activeDocument;
app.findGrepPreferences = app.changeGrepPreferences = null;
app.findGrepPreferences.findWhat = "\\A.";
found = doc.findGrep();
if ( !found.length) return;
found = found[0];
st = found.parentStory;
pCurr = found.paragraphs[0];
ipNext = st.insertionPoints [ pCurr.insertionPoints[-1].index ];
var pNext = ipNext.paragraphs[0];
alert( pNext.contents );
};
main();
这里没有声称绝对真理。只是建议使用nextItem()的可能问题。
答案 2 :(得分:0)
更简单的代码
result.paragraphs.nextItem(result.paragraphs[0]);
谢谢
毫克