[ID CC-CC2021] Как выделить текст?

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
хотя я уже не уверен. вроде getElements() для этого достаточно. надо проверять, ускоряет ли slice() или нет
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 189
Реакции
10 844

iv-mi

15 лет на форуме
Сообщения
563
Реакции
375
Мне тоже кажется, что для этой задачи нужен только getElements()
Оператор slice() работает с контентной частью, вот примеры использования:
------
// добавить нули перед числом:
0 - 000, 1 - 001, ... 11 - 011 ...
function pad (n) {
return ('00'+n).slice(-3);
}
///===
// способ убедиться, что myFile -- это индизайновский файл
if (myFile.name.slice(-5) == ".indd") { return true } ;
-----
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
ваш пример к строке относится, а не к массиву. slice() на массиве возвращает новый массив - копию оригинала.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 189
Реакции
10 844
Мне тоже кажется, что для этой задачи нужен только getElements()
Оператор slice() работает с контентной частью, вот примеры использования:
------
// добавить нули перед числом:
0 - 000, 1 - 001, ... 11 - 011 ...
function pad (n) {
return ('00'+n).slice(-3);
}
///===
// способ убедиться, что myFile -- это индизайновский файл
if (myFile.name.slice(-5) == ".indd") { return true } ;
-----
А мне кажется, вы невнимательно читаете тред, перечитайте, пожалуйста, последние сообщения.
 

iv-mi

15 лет на форуме
Сообщения
563
Реакции
375
> slice() на массиве возвращает новый массив - копию оригинала.
Но этот массив -- уже контентная часть того, что собрано при помощи getElements(), разве не так?
А тут надо искать границу приложения стиля. Для решения этой задачи только contents-информации недостаточно.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 189
Реакции
10 844
> slice() на массиве возвращает новый массив - копию оригинала.
Но этот массив -- уже контентная часть того, что собрано при помощи getElements(), разве не так?
А тут надо искать границу приложения стиля. Для решения этой задачи только contents-информации недостаточно.
При чем тут контентная информация? Вовсе нет
 
  • Спасибо
Реакции: iv-mi

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 213
Как подкрутить хвост "рыбе", чтоб плавала быстрее???
JavaScript:
var beg = app.selection[0].paragraphs[0];
var style = beg.appliedParagraphStyle;
var index = beg.index;
var end = beg;
var count = 1;
while (para = beg.parent.paragraphs[index + count], para.isValid && para.appliedParagraphStyle != style) {
    end = para;
    count++;
}
var text = beg.parent.characters.itemByRange(beg.characters[0], end.characters[end.characters.length - 1]);
text.select();
Выделять текст нет никакого смысла. Его можно и так обрабатывать.
 
  • Спасибо
Реакции: iv-mi

iv-mi

15 лет на форуме
Сообщения
563
Реакции
375
Да, я был не прав.
Видимо, из-за того, что иначе использовал этот оператор.
Да, slice() создаёт новый массив.
Если var para = ms.paragraphs.everyItem().getElements();
вернет в para шесть абзацев, то
то var pS = para.slice(); -- это ссылка на массив из этих шести абзацев.
варианты para.slice() и para.slice(0) идентичны.
pS = para.slice(2) -- ссылка на массив из четырёх абзацев из para, начиная с индекса 2
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Да, я был не прав.
Видимо, из-за того, что иначе использовал этот оператор.
Да, slice() создаёт новый массив.
Если var para = ms.paragraphs.everyItem().getElements();
вернет в para шесть абзацев, то
то var pS = para.slice(); -- это ссылка на массив из этих шести абзацев.
варианты para.slice() и para.slice(0) идентичны.
pS = para.slice(2) -- ссылка на массив из четырёх абзацев из para, начиная с индекса 2
ну, краткий курс JS мы все уже не раз проходили ) возможно топикстартеру это будет интересно, впрочем
 

rezunoff

Участник
Топикстартер
Сообщения
69
Реакции
13
JavaScript:
var beg = app.selection[0].paragraphs[0];
var style = beg.appliedParagraphStyle;
var index = beg.index;
var end = beg;
var count = 1;
while (para = beg.parent.paragraphs[index + count], para.isValid && para.appliedParagraphStyle != style) {
    end = para;
    count++;
}
var text = beg.parent.characters.itemByRange(beg.characters[0], end.characters[end.characters.length - 1]);
text.select();
Выделять текст нет никакого смысла. Его можно и так обрабатывать.
2021-02-27_11-19-27.png
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 189
Реакции
10 844
Вы уж совсем какого-то экстремального вангования хотите - мало того, что вам готовая быстроплавающая рыба нужна, так еще и в любом резервуаре с произвольной кислотой. Откуда ж мы по скриншоту поймем, как там у вас параграфы накручены?
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 213
JavaScript:
var beg = app.selection[0].paragraphs[0];
var style = beg.appliedParagraphStyle;
var end = beg;
while (true) {
    chr = end.parent.characters[end.characters[end.characters.length - 1].index + 1];
    if (!chr.isValid || chr.appliedParagraphStyle == style) {
        break;
    }
    end = chr.paragraphs[0];
}
var text = beg.parent.characters.itemByRange(beg.characters[0], end.characters[end.characters.length - 1]);
text.select();
 
  • Спасибо
Реакции: afalbert

rezunoff

Участник
Топикстартер
Сообщения
69
Реакции
13
JavaScript:
var beg = app.selection[0].paragraphs[0];
var style = beg.appliedParagraphStyle;
var end = beg;
while (true) {
    chr = end.parent.characters[end.characters[end.characters.length - 1].index + 1];
    if (!chr.isValid || chr.appliedParagraphStyle == style) {
        break;
    }
    end = chr.paragraphs[0];
}
var text = beg.parent.characters.itemByRange(beg.characters[0], end.characters[end.characters.length - 1]);
text.select();
Спасибо! То что надо! Чувствуется рука мастера.