javascript - 通过名称的一部分在 InDesign 中引用文本框架

标签 javascript reference adobe-indesign extendscript

我遇到了一个有趣的难题:如果我只知道其名称的一部分,如何在 InDesign CS6 中引用特定的文本框架?我有这段代码:

var otherOverTable = document.layers.item("Spec Sheet").textFrames.item("<Other Printed ItemsYESNOOv>").tables.item(0);
var outputTable = document.layers.item("Spec Sheet").textFrames.item("<OUTPUT>").tables.item(0);

此代码无效。我很确定这是因为名称被“<”和“>”符号包围的特定文本框架是由这些框架内的文本自动生成的。

除了在运行脚本之前重命名那些 textFrame 对象之外,我还能做什么?有没有什么方法可以引用第一个,例如,通过说“获取名称中包含‘其他’的文本框架”之类的话?我无法通过索引号引用它,因为每次运行脚本时索引号都会不同。

编辑

谢天谢地,我已经得到了这段代码:

var otherOverTextFrame = findTextFrame(document, "Other");
var outputTextFrame = findTextFrame(document, "OUTPUT");

function findTextFrame(document, searchStr) {
var textFramesArray = document.textFrames.everyItem().getElements();
for (var i = 0; i < textFramesArray.length; i++) {
    if (textFramesArray[i].tables.item(0).isValid) {
        if (textFramesArray[i].tables.item(0).cells.item(0).contents.indexOf(searchStr) != -1) {
            return textFramesArray[i];
        }
    }
}
}

这将返回一个 [object TextFrame]。我认为这就是我所需要的,但我无法弄清楚如何引用它。例如,我需要更改该 textFrame 中表格中某个单元格的内容。但是,此代码不起作用:

var otherOverTable = document.layers.item("Spec Sheet").otherOverTextFrame.tables.item(0);

我该如何克服最后一个障碍?

最佳答案

如果你想找到一个包含单词“Other”的 TextFrame,你可以尝试这样的事情:

app.findTextPreferences = NothingEnum.NOTHING;
app.findTextPreferences.findWhat = "Other";
var textArray = document.findText();
var textFrame = textArray[0].parentTextFrames[0];

如果您想查找名称中包含“Other”的 TextFrame,那么您可能需要自己搜索:

var textFrame = findTextFrame("Other");

function findTextFrame(searchStr) {
    var textFramesArray = document.textFrames.everyItem().getElements();
    for (var i = 0; i < textFramesArray.length; i++) {
        var textFrame = textFramesArray[i];
        if (textFrame.name.indexOf(searchStr) != -1) {
            return textFrame;
        }
    }
}

请注意,这两种方法都可以找到多个匹配项,并且只会返回第一个匹配项。

编辑:您从中得到什么输出?

app.findGrepPreferences = NothingEnum.NOTHING;
app.findGrepPreferences.findWhat = "Other";
var textArray = document.findGrep();
$.writeln("Found " + textArray.length + " matches.");
for (var i = 0; i < textArray.length; i++) {
    $.writeln("\nMatch " + (i + 1) + ":");
    var text = textArray[i];
    $.writeln("Contents: " + text.contents.toString());
    $.writeln("Number of parent text frames: " + text.parentTextFrames.length);
    $.writeln("Type of parent: " + text.parent.constructor.name);
}

关于javascript - 通过名称的一部分在 InDesign 中引用文本框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16899513/

相关文章:

javascript - React Antd 无法从自定义日期选择器中获取值

Java:如何打印整数对象的引用?

php - 错误消息 “Strict standards: Only variables should be passed by reference”

c++ - 通过非自动非常量左值引用时,for_each、map 和 lambda 出错

adobe - 获取 ExtendScript 中错误的堆栈跟踪

javascript - 在 Adob​​e InDesign 中使用 peerjs

javascript - 获取一段文本的几何边界

javascript - 查询选择器错误: Not valid selector

javascript - 使用 JavaScript 提取 HTML 标签之间的值

javascript - 如何在悬停时更改 SVG 的描边颜色?