テキストボックスでは、ユーザーがタブアウトの [] で囲まれた次の単語にジャンプできるという要件があります。たとえば、こんにちは [これ] は [an] の例です。[this] のテスト したがって、カーソルが Hi にあるときに tab out を実行すると、[this] で囲まれた文字が強調表示され、再び tabl out を実行すると、次の [an] で囲まれた次の文字が強調表示されます。これはうまくいきます
[] の間の特殊文字を含むテキストを強調表示する必要がある
ケース1:
末尾
が]]]
ある場合、先頭のみを強調表示し[[[
、無視します。]]]]
ケース 2:複数の末尾の]
eeの場合、[
これ]]]]
は[
test]
であり、理想的には this から[]
1 つのタブを 1 つ取り出し、次の[
テキストに移動する必要があります]
強いテキスト コードは
$(document).ready(function() {
$('textarea').highlightTextarea({
color : '#0475D1',
words : [ "/(\[.*?\])/g" ],
textColor : '#000000'
});
$('textarea').live('keydown', function(e) {
var keyCode = e.keyCode || e.which;
if (keyCode == 9) {
var currentIndex = getCaret($(this).get(0))
selectText($(this), currentIndex);
return false;
}
});
});
function selectText(element, currentIndex) {
var rSearchTerm = new RegExp(/(\[.*?\])/);
var ind = element.val().substr(currentIndex).search(rSearchTerm)
currentIndex = (ind == -1 ? 0 : currentIndex);
ind = (ind == -1 ? element.val().search(rSearchTerm) : ind);
currentIndex = (ind == -1 ? 0 : currentIndex);
var lasInd = (element.val().substr(currentIndex).search(rSearchTerm) == -1 ? 0
: element.val().substr(currentIndex).indexOf(']'));
var input = element.get(0);
if (input.setSelectionRange) {
input.focus();
input.setSelectionRange(ind + currentIndex, lasInd + 1 + currentIndex);
} else if (input.createTextRange) {
var range = input.createTextRange();
range.collapse(true);
range.moveEnd('character', lasInd + 1 + currentIndex);
range.moveStart('character', ind + currentIndex);
range.select();
}
}
function getCaret(el) {
if (el.selectionEnd) {
return el.selectionEnd;
} else if (document.selection) {
el.focus();
var r = document.selection.createRange();
if (r == null) {
return 0;
}
var re = el.createTextRange(), rc = re.duplicate();
re.moveToBookmark(r.getBookmark());
rc.setEndPoint('EndToStart', re);
return rc.text.length;
}
return 0;
}
上記の2つのケースを処理することを教えてください