2016-04-06 2 views
0

Я пытаюсь найти все «#» на активной странице и изменить их на числа, т. Е. 1, 2, 3. , ,Изменить текст с помощью переменной в InDesign javascript

Код ниже - то, что я думал, будет работать, но это не так. Вместо этого он меняет каждый «#» на «0».

app.findTextPreferences = app.changeTextPreferences = NothingEnum.NOTHING; 
app.findTextPreferences.findWhat = "#"; 

var finds = app.activeDocument.findText(); 
if (finds.length > 0) { 
    for (var i = 0; i < finds.length; i++) 
    { 
     app.changeTextPreferences.changeTo = "no: " + i; 
     app.activeDocument.changeText(); 
    } 
    else 
    { 
     alert("Nothing has been found"); 
    } 
} 
+0

Эта строка «вар находит = app.activeDocument.findText ();» не принимает символ «#». Правильно ли это? – Zafta

+0

@ Zafta, когда я запускаю его, затем находит все «#» и меняет их на 0. –

+0

можете ли вы передать консоль переменной «i» внутри цикла – Zafta

ответ

1

Как указано в описании ali haydar, changeText будет применяться по всему миру и будет разорвать прежние ссылки на тексты findText. Вам нужно использовать свойство содержимого в вашем цикле.

app.findTextPreferences = app.changeTextPreferences = NothingEnum.NOTHING; 
app.findTextPreferences.findWhat = "#"; 

var finds = app.activeDocument.findText(); 
if (finds.length > 0) 
{ 
    for (var i = 0; i < finds.length; i++) 
    { 
     finds[i].contents = "no: " + String(i); 
    } 
} 
else 
{ 
alert("Nothing has been found"); 
} 
+0

Большое спасибо, он работает! Как наилучший подход к ограничению этого поиска/изменения только на текущей странице? –

+0

Не должно быть «{» между первым «если» и «за»? –

+0

Действительно. Я просто копирую/вставляю код без пристального взгляда. Это всегда хороший шаг, чтобы добавить фигурные скобки и полуколоны, даже если это возможно. – Loic

0

На самом деле вы можете даже избавиться от если условие:

app.findTextPreferences = app.changeTextPreferences = null; 
app.findTextPreferences.findWhat = "#"; 

var finds = app.activeDocument.findText(); 
var n = finds.length; 
var nStart = n; 
while (n--) finds[n].contents = "no: " + String(n+1); 
alert(nStart? nStart+" replacements made…" : "Nothing has been found"); 
+0

Спасибо, это тоже работает, и, конечно, выглядит лучше. Но после изменений изменяется «-1 замена», и когда я нажимаю Ctrl + Z, я вижу, что замена была сделана в обратном порядке, это нормально? –

+0

любые комментарии о том, как сделать эту работу только на текущей странице :) –

0

Рассматривать страница 1 только ...

var main = function(){ 
    var doc = app.properties.activeDocument, 
    finds,n; 

    app.findTextPreferences = app.changeTextPreferences = null; 
    app.findTextPreferences.findWhat = "#"; 

    if (!doc) return; 
    finds = doc.findText(); 
    n = finds.length; 

    while (n--) { 
     finds[n].parentTextFrames.length 
     && finds[n].parentTextFrames[0].isValid 
     && finds[n].parentTextFrames[0].parentPage.id==doc.pages[0].id 
     && finds[n].contents = "no: " + String(n+1); 
    } 

}; 

main(); 
+0

спасибо, я получил сообщение об ошибке «doc not defined»; если я определяю его так, как это 'var doc = app.activeDocument' работает на каждой странице, а не только на странице 1 –

+1

Это не имеет смысла. Я только что отредактировал фрагмент, поэтому он содержит весь необходимый код. Вы оставили свой changeText-вызов? – Loic

+0

Теперь он работает, спасибо вам большое. –

Смежные вопросы