如何获取光标所在的textFrame?

时间:2019-03-17 18:20:16

标签: javascript adobe-indesign

因此,我在文本框中输入内容,然后决定运行脚本。

我希望该脚本引用光标所在的文本框。

在Javascript中,如何引用特定的textFrame?

1 个答案:

答案 0 :(得分:0)

解决方案:

请考虑以下要点:

var selectedItem = app.activeDocument.selection[0];

if (selectedItem instanceof InsertionPoint &&
    selectedItem.parentTextFrames[0] instanceof TextFrame) {

    var textFrame = selectedItem.parentTextFrames[0];

    // This just demonstrates that the variable `textFrame` does
    // hold a reference to the actual text frame - let's delete it !
    textFrame.remove();

} else {
    alert("The cursor has not been placed in a text frame");
}

说明:

  1. 首先,我们通过以下代码获得对文档中所选内容的引用:

    var selectedItem = app.activeDocument.selection[0];
    
  2. 然后我们通过以下方式推断选择类型是否等于“文本框中的光标”

    • 首先检查它是instanceof InsertionPoint
    • 第二,通过检查其parentTextFrames是否为TextFrame

    if (selectedItem instanceof InsertionPoint &&
        selectedItem.parentTextFrames[0] instanceof TextFrame) {
    
        // ... If we get here, then the "cursor is in a Text Frame".
    
    }
    
  3. 如果条件检查推断出“光标位于文本框架中” true,则我们继续分配文本框架的引用名为textFrame的变量。即

    var textFrame = selectedItem.parentTextFrames[0];
    

    只是为了证明变量textFrame确实拥有对实际文本框架的引用,我们将其删除了!

    textFrame.remove(); // Do stuff with the text frame !
    
  4. 如果条件检查推断出“光标位于文本框架中” false,则我们提醒用户”光标未放在文本框中”。


文本框中的选定文本字符

也许用户已经在文本框中选择了文本字符,而不是仅仅将光标放在文本框中。如果您也想在这种情况下获取文本框架参考-则将上面要点中的条件检查更改为类似以下内容:

if ((selectedItem instanceof InsertionPoint || selectedItem instanceof Text) 
    && selectedItem.parentTextFrames[0] instanceof TextFrame) {
    // ...
}