突出显示文本指针所在的单词

时间:2014-04-01 03:02:42

标签: javascript jquery

我试图在javascript中实现一个sublime文本功能。当您在Sublime中按CTRL + D并且没有突出显示单词时,它会直接突出显示文本指针最接近的单词。

你知道如何在javascript中做到这一点吗?我使用的是jQuery。

这是我在javascript中所做的,但它不起作用:

http://jsfiddle.net/fsgK6/1/

$('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;
    }
})

2 个答案:

答案 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