[ID CC-CC2022] Удаление ссылок

  • Автор темы Автор темы efodin
  • Дата начала Дата начала
Как ни странно, есть мнемоническое правило. Методы любого конкретного объекта возвращают массивы; коллекции содержатся только в свойствах объектов.
 
  • Спасибо
Реакции: kstati
Так кто нибудь проверил, работает или нет?
 
у меня нет...
 
Не факт
selectionArray of NothingEnum
Object
Object
r/wThe selected object(s). Can also accept: Object or NothingEnum enumerator.
Я предполагал, что для выделенного текстового фрагмента тип selection будет Text
Индусы наиндусили. Как минимум на моей CS 5.5
selection получается либо массивом, либо коллекцией
1572000915314.png
 
Последнее редактирование:
Индусы наиндусили. Как минимум на моей CS 5.5
Там в зависимости от того, что именно ты выделяешь, тип может быть разным. В нормальных скриптах перво наперво проверяется тип выделения
 
Там в зависимости от того, что именно ты выделяешь, тип может быть разным. В нормальных скриптах перво наперво проверяется тип выделения
В данном случае выделен текст инструментом "Т". Доступ к нему идет через selection[0].
В случае множественного выделения получается массив разных объектов
1572001204241.png
 
Я как то отлаживал свой скрипт на разных выделениях - типы были и Array и Text и TextRange
 
Я как то отлаживал свой скрипт на разных выделениях - типы были и Array и Text и TextRange
Да, есть такое. Лично я не уловил поведения до конца
Выделяем "Т" кусок текста
1572001695169.png


app.selection.findHyperlinks(); падает - нет доступа к методам Text;
1572001755992.png


Отбираем-с выделение, как из коллекции/массива
Имя типа объекта то же, а методы и свойства доступны
1572001965037.png
 
Сейчас глянул как в стандартных скриптах делают - пожалуй, правильно именно selection[0]:
JavaScript:
        if(app.documents.length > 0){
                if(app.selection.length > 0){
                        switch(app.selection[0].constructor.name){
                                case "InsertionPoint":
                                case "Character":
                                case "Word":
                                case "TextStyleRange":
                                case "Line":
                                case "Paragraph":
                                case "TextColumn":
                                case "Text":
                                case "Cell":
                                case "Column":
                                case "Row":
                                case "Table":
 
А если app.selection[0].findHyperlinks() - работает?

Я пропустил сообщение с простым обяснением
Как ни странно, есть мнемоническое правило. Методы любого конкретного объекта возвращают массивы; коллекции содержатся только в свойствах объектов.

app.selection - коллекция
.findHyperlinks() - массив

Или нет?
 
Последнее редактирование:
Выдрал из своего скрипта кусок с кодом обработки выделения, много чего может прятаться в обычном выделении
JavaScript:
function processSelection(){
    if (app.activeDocument.selection.length) {
        app.activeDocument.selection.forEach(function (obj) {
            switch(obj.constructor.name){
                case "TextColumn":
                case "Text":
                case "Paragraph":
                    processPgfs(obj);
                    break;
                   
                case "TextStyleRange":
                case "Word":
                case "Line":
                case "Character":
                    performTransformation(obj);
                    break;
                   
                case "Table":
                    processTable(obj);
                    break;
                   
                case "Cell":
                    processCell(obj);
            }
        });
    }
}

.forEach сделал через мозилловский полифилл. Уж очень удобно.