我试图在javascript中实现一个sublime文本功能。当您在Sublime中按CTRL + D并且没有突出显示单词时,它会直接突出显示文本指针最接近的单词。
你知道如何在javascript中做到这一点吗?我使用的是jQuery。
这是我在javascript中所做的,但它不起作用:
$('a').click(function(){
var start = $('textarea').prop("selectionStart");
var end = $('textarea').prop("selectionEnd");
if(start == end && start != 0){
var textarea_text = $('textarea').val();
var word = "";
// left side
while($.trim(word) == word){
start = start - 1;
word = textarea_text.substr(start, end - start);
if(start == 0)
break;
}
word = $.trim(word);
// right side
while($.trim(word) == word){
end = end + 1;
word = textarea_text.substr(start, end - start);
if(end > textarea_text.length)
break;
}
word = $.trim(word);
$('textarea').prop('selectionStart') = start;
$('textarea').prop('selectionEnd') = end;
}
})
答案 0 :(得分:1)
$('textarea').prop('selectionStart') = start;
$('textarea').prop('selectionEnd') = end;
应该是
$('textarea').prop('selectionStart', start);
$('textarea').prop('selectionEnd', end);
关于选择的开始和结束..看起来你需要仔细研究如何检测字边界
我最终将开始代码调整为更像这样(并更改为textarea
点击进行测试):
$('textarea').click(function(){
var start = $('textarea').prop("selectionStart");
var end = $('textarea').prop("selectionEnd");
console.log(start + ' ' + end);
if(start == end && start != 0){
var textarea_text = $('textarea').val();
var word = "";
// left side
while($.trim(word) == word){
start = start - 1;
word = textarea_text.substr(start - 1, end - start);
console.log(word);
if(start == 0)
break;
}
word = $.trim(word);
// right side
while($.trim(word) == word){
end = end + 1;
word = textarea_text.substr(start, end - start);
if(end > textarea_text.length)
break;
}
word = $.trim(word);
$('textarea').prop('selectionStart', start);
$('textarea').prop('selectionEnd', end);
}
})
这是一个更新的小提琴http://jsfiddle.net/fsgK6/2/
答案 1 :(得分:0)
我已经完成了它的确有效,这里是代码:https://gist.github.com/mimoo/9907534