选中的文本缩进4个空格。

5
我想使用jQuery将选定的文本在
2个回答

5
function indentSelection() {
    var selection = $(this).getSelection().text;
    var textarea = $(this);
    var result = '';
    var lines = selection.split('\n');
    var space = '    ';
    for(var i = 0; i < lines.length; i++)
    {
        result += space + lines[i] + '\n';
    }
    var new_text = textarea.val().split(selection).join(result);
    textarea.val(new_text);
}

应该这样做。有关如何获取所选文本的示例(此处已缩短)请参见如何在文本区域中获取所选文本?


非常感谢Marc。我现在遇到的问题是window.getSelection()和相关函数(这里:http://mark.koli.ch/2009/09/use-javascript-and-jquery-to-get-user-selected-text.html)无法选择文本框内的文本。 - Bojangles
糟糕,没关系 - 多亏了这个jQuery插件:https://github.com/localhost/jquery-fieldselection,现在一切都解决了。非常感谢您的帮助 - 没有这个起点,我会一无所获。 - Bojangles
看来我说得太早了。我有两个问题:1)在缩进的选择结束后会添加一个换行符,更重要的是,2)我无法对输入的选定文本进行缩进,只能对由JS添加或在文本区域开头的文本进行缩进。 - Bojangles
你能在 jsFiddle 上设置一个示例吗? - marc
更新了它,我不得不使用val()而不是text(),因为text()始终是如何初始化的。请参见http://jsfiddle.net/zvqy5/22/。 - marc
显示剩余2条评论

1
我会使用正则表达式的 replace() 方法来实现这个功能。只需要将换行符替换为一个换行符加上四个空格即可:
function indentSelection(textarea) {
  $(textarea).val(
        $(textarea).val().substring(0, textarea.selectionStart)
          + $(textarea).getSelection().text.replace(/\n/m,'    \n')
          + $(textarea).val().substring(textarea.selectionEnd)
   );
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接