私はテキストエリアを持っていて、誰かが{{リンク を入力したかどうかを確認しようとしています.
私が今持っているのは、誰かが文字kを入力すると、6文字戻って、テキストが{{リンクに一致するかどうかを判断することです
しかし、範囲の開始点と終了点の設定に問題があります。問題はノードの識別にあると思いますが、よくわかりません。
主に誰かが文字「k」を入力したとき、私は彼らがタイプしたかどうかを確認するために戻ってみようとしています: {{link 。
これは、範囲を設定して選択を取得しようとしている部分で機能していないものです。
$(document).on('keyup', 'textarea', function(e) {
if (e.keyCode == 75) {
var end = $('textarea').getCaretPosition();
var start = end - 6;
var node = $(this).get(0);
var range = document.createRange();
range.setStart(node, start);
range.setEnd(node, end);
var selection = range.toString();
if( selection == '{{link' ){
// we'll launch a modal here
}
}
});
$.fn.getCaretPosition = function() {
var el = $(this).get(0);
var pos = 0;
if ('selectionStart' in el) {
pos = el.selectionStart;
} else if ('selection' in document) {
el.focus();
var Sel = document.selection.createRange();
var SelLength = document.selection.createRange().text.length;
Sel.moveStart('character', -el.value.length);
pos = Sel.text.length - SelLength;
}
return pos;
}
これにより、次のエラーが生成されます: Uncaught Error: INDEX_SIZE_ERR: DOM Exception 1 at range.setStart(node, start);