Пример 9. Как указывать условия для выхода из цикла на JavaScript для iMacros?

В одной из записей были показаны примеры выполнения бесконечного цикла.

В предыдущей записи приводился пример, как указать условие для выхода из цикла с помощью синтаксических конструкций: do..while и var.

Теперь мы используем другой вариант.

Для это случая возьмём известный нам пример, где требуется неоднократное повторение одной iim-команды:

[code lang=»js»]
TAG POS=2 TYPE=TSPAN ATTR=* EXTRACT=TXT
TAG POS=3 TYPE=TSPAN ATTR=* EXTRACT=TXT
TAG POS=4 TYPE=TSPAN ATTR=* EXTRACT=TXT
TAG POS=5 TYPE=TSPAN ATTR=* EXTRACT=TXT
TAG POS=6 TYPE=TSPAN ATTR=* EXTRACT=TXT
TAG POS=7 TYPE=TSPAN ATTR=* EXTRACT=TXT
TAG POS=8 TYPE=TSPAN ATTR=* EXTRACT=TXT
TAG POS=9 TYPE=TSPAN ATTR=* EXTRACT=TXT
TAG POS=10 TYPE=TSPAN ATTR=* EXTRACT=TXT
TAG POS=11 TYPE=TSPAN ATTR=* EXTRACT=TXT
[/code]

Как вы помните, эта iim-команда извлекает показания процентов со страницы статистики binary.com.

Используя выше изложенные знания в JavaScript вы написали бы примерно такой код:

[code lang=»js»]
iimPlayCode(‘TAG POS=2 TYPE=TSPAN ATTR=* EXTRACT=TXT’);
iimGetLastExtract(1);
iimPlayCode(‘TAG POS=3 TYPE=TSPAN ATTR=* EXTRACT=TXT’);
iimGetLastExtract(1);
iimPlayCode(‘TAG POS=4 TYPE=TSPAN ATTR=* EXTRACT=TXT’);
iimGetLastExtract(1);
iimPlayCode(‘TAG POS=5 TYPE=TSPAN ATTR=* EXTRACT=TXT’);
iimGetLastExtract(1);
iimPlayCode(‘TAG POS=6 TYPE=TSPAN ATTR=* EXTRACT=TXT’);
iimGetLastExtract(1);
iimPlayCode(‘TAG POS=7 TYPE=TSPAN ATTR=* EXTRACT=TXT’);
iimGetLastExtract(1);
iimPlayCode(‘TAG POS=8 TYPE=TSPAN ATTR=* EXTRACT=TXT’);
iimGetLastExtract(1);
iimPlayCode(‘TAG POS=9 TYPE=TSPAN ATTR=* EXTRACT=TXT’);
iimGetLastExtract(1);
iimPlayCode(‘TAG POS=10 TYPE=TSPAN ATTR=* EXTRACT=TXT’);
iimGetLastExtract(1);
iimPlayCode(‘TAG POS=11 TYPE=TSPAN ATTR=* EXTRACT=TXT’);
iimGetLastExtract(1);
[/code]

Синтаксически код написан корректно и будет выполняться, хотя и выглядит громоздко. Поэтому, возможно, захотите его как-то укоротить. Это возможно, например, с помощью синтаксической конструкции for(;;){}.

Вспомним, что:

  • for(;;){} создаёт цикл, указав начальное состояние, условие и операцию обновления состояния; эти условия (), предусмотренные в круглых скобках, разделяются обязательным символом ; точка с запятой, сам же цикл команд выполняется внутри блока {}, то есть внутри фигурных скобок.
  1. В качестве начального состояния задействуем переменную, объявив её с помощью var. Присвоим ей имя count и укажем начальное значение равное 2. Полностью это будет выглядеть таким образом: var count=2.

  2. Условием станет задание повторить iim-команды 10 раз, пока не станет значение переменной count равным 12 после десятой итерации, так как 2+10=12. Выглядит это выражение с использованием оператор сравнения так: count!=12.

  3. Операцией обновления состояния послужит счёт повторяющихся iim-команд в блоке {}. Для этой цели к начальному состоянию будем прибавлять единицу после каждой итерации (повторения внутри цикла), то есть count=count+1. К счастью, в JavaScript эту арифметическую операцию, которая называется инкремент, можно сократить так: count++.

И получим примерно такой js-код:

[code lang=»js»]
for(var count=2;count!=12;count++)
{
iimPlayCode(‘TAG POS=’+count+’ TYPE=TSPAN ATTR=* EXTRACT=TXT’);
iimGetLastExtract(1);
}
[/code]

Или равнозначный ему такой js-код:

[code lang=»js»]
var count=2;
while(count!=12)
{
iimPlayCode(‘TAG POS=’+count+’ TYPE=TSPAN ATTR=* EXTRACT=TXT’);
iimGetLastExtract(1);
count++;
}
[/code]

Чтобы посмотреть, какие значения извлекаются, объявим две переменные. Первую назовём total с начальным значением равным пустой строчке так: var total=‘‘. Затем, используя оператор присваивания, будем добавлять в него значение  второй переменной по имени percent, получаемое после каждой итерации в цикле. А значение первой переменной выведем на зелёном дисплее с помощью команды iimDisplay().

В итоге получается такой js-код:

[code lang=»js»]
//var percent;
//var total=»;
//вариант объявления переменных
var percent,total=»;
var pos=’TAG POS=’;
var ext=’ TYPE=TSPAN ATTR=* EXTRACT=TXT’;
for(var count=2;count!=12;count++)
{
iimPlayCode(pos+count+ext);
percent=iimGetLastExtract(1);
//total=total+percent;
//вариант сокращённого оператора
total+=percent;
}
iimDisplay(total);
[/code]

 

 

Скачать примеры скриптов в zip-архиве.

 

В этом видео-ролике наглядно показан выше описанный процесс.