私はすべてのキーアップで起動する非常に単純な関数を持っています。それは、特定の条件(文が長い)で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);
}
:)
ニース。デバウンサーの仕組みを把握するために私をしばらく時間がかかりました。しかし今、それは魅力のように動作します:)もっと流動的です。 人は文章の途中でタイピングをやめてしまうことが多いので、(。!などの)上でのみ実行したくありません。そして私はできるだけ早くテキストを検証したい:) debouncerは効率的な方法でこれを達成するための完全な方法です。 –
少し明確に@Jorge デバウナー機能を使用すると、Chrome Inspect Toolは検査するときに絶えず一時停止します。私はそれを間違った方法で使用しているのですか、これは期待されていますか? –