我的要求是,在文本框中,用户可以跳到选项卡上 [] 中包含的下一个单词,例如 Hi [this] is [an] 示例。测试 [this] 因此,当我的光标位于 Hi 并且我执行 tab out 时,[this] 中包含的字符会突出显示,当我再次执行 tabl out 时,以下 [an] 中的下一个字符会突出显示。这工作正常
现在的要求是需要突出显示包含 [] 之间的特殊字符的任何文本
案例1:当我有尾随时]]]
,它只突出显示前导[[[
并忽略]]]]
例如
案例 2:如果有多个尾随]
ee ,[
这]]]]
是[
测试]
,理想情况下是一个单独的表格,它应该转到包含的下一个文本,[]
但用户必须在每次训练中标记 4 次一个选项卡]才能转到下一个[
文本]
强文本代码是
$(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;
}
请让我知道处理上述两种情况