У меня есть довольно простая функция, которая срабатывает при каждом нажатии клавиши. Что он делает, это отметить входной текст из TinyMCE при определенном условии (предложение длиннее), а затем отображает выделенный текст в редакторе TinyMCE.JavaScript: Как обрабатывать память в растущих массивах?
Это работает как очарование на первый взгляд. Но по мере того, как текст вырабатывает массив, функция выполняет больше времени и дольше.
Есть ли блестящий способ сделать что-то по линиям обнаружения, где курсор ввода находится в тексте, а затем анализировать только окружающие слова (может быть текущее предложение для примера) и повторное использование остальной части текст?
Код выглядит следующим образом.
HTML
<div id="myTextArea" contenteditable="true">
Just put lorem ipsum here.
</div>
JavaScript (JQuery)
tinymce.init({
selector: '#myTextArea',
height: 300,
setup: function(ed) {
ed.on('change', myCustomInitInstance);
ed.on('keyup', myCustomInitInstance);
ed.on('paste', myCustomInitInstance);
ed.on('cut', myCustomInitInstance);
},
init_instance_callback: "myCustomInitInstance",
});
function myCustomInitInstance(inst) {
var rawText = tinyMCE.get('myTextArea').getContent({
format: 'text'
});
var sentenceArray = rawText.split(".");
var matchWarning = [];
var longSentence = 16;
var words;
var wordCounter;
var output;
for (var i in sentenceArray) {
words = sentenceArray[i].split(" ");
wordCounter = words.length;
if (wordCounter > longSentence) {
matchWarning.push(sentenceArray[i]);
}
}
var editor = tinyMCE.activeEditor;
// Store the selection
var bookmark = editor.selection.getBookmark();
// Remove previous marks and add new ones
$(editor.getBody()).unmark().mark(matchWarning, {
acrossElements: true,
"separateWordSearch": false,
});
// Restore the selection
editor.selection.moveToBookmark(bookmark);
}
Любые предложения о том, как улучшить скорость в этом приветствуются :)
Nice. Взял меня немного, чтобы понять, как работает дебютант. Но теперь это работает как шарм :) Гораздо более жидкий. Я не хочу работать только на (.!? И т. Д.), Так как люди часто перестают печатать в середине предложения. И я хочу скорректировать текст как можно быстрее :) Дебютант - идеальный способ добиться этого эффективным образом. –
Немного clarificatoin @Jorge Когда я использую функцию debouncer, мой инструмент Chrome Inspect Tool постоянно останавливается, когда я пытаюсь проверить. Я использую это неправильно или это можно ожидать? –