在文本区域中的10个字符后面放置换行符

时间:2014-04-04 13:04:48

标签: javascript jquery

我有一个可以占用10000个字符的文本区域。我想在10个字符

之后将断路器放在文本区域值的每一行

这样的事我想要实现

11111111 1
111 111 11
11 11 11 1

以上所有行都有10个字符。

var start = 3
var times = 1;
$('.mydesc').keyup(function () {
    var len = $(this).val().length;
    if (len == start) {
        this.value += '\n';
        times = ++times;
        start= ((start * 2) + start);
    }
});

但不起作用..

3 个答案:

答案 0 :(得分:3)

最简单的解决方案是始终重新添加所有新行:

$('.mydesc').keyup(function () {
    this.value = this.value
                     .replace(/[\n\r]+/g, "")
                     .replace(/(.{10})/g, "$1\n");
});

http://jsfiddle.net/s4cUz/

答案 1 :(得分:1)

这样的事情可以做到:

http://jsfiddle.net/Zxuj7/

$('#test_textarea').keyup(function () {
   var new_stuff = $(this).val();
       new_stuff = new_stuff.replace(/[\n\r]+/g,""); // clean out newlines, so we dont get dups!
   var test = new_stuff.replace(/(.{10})/g,"$1\n");
   $(this).val(test);
});

然而,请注意,它并没有很好地与"删除"的人物。如果你试一试,你会注意到当你真正删除一个字符并且代码运行时,它会再次将你放在textarea的末尾(因为它"覆盖"值)

<强>更新

在完成编辑textarea之后,您实际上可能会更好地进行格式化 - 即使用模糊();

$('#test_textarea').blur(function () {
    // leaving the field... so lets try and format nicely now
    var new_stuff = $(this).val();
           new_stuff = new_stuff.replace(/[\n\r]+/g,""); // clean out newlines, so we dont get dups!
           new_stuff = new_stuff.replace(/(.{10})/g,"$1\n");
    $(this).val(new_stuff);
});

虽然它没有实时完成 - 但删除/编辑内容时效果更好

答案 2 :(得分:0)

Andrew Newby剧本的增强版:

$('#test_textarea').keyup(function (e) {
     if (e.keyCode === 8) return; // Backspace
     var new_stuff = $(this).val();
     new_stuff = new_stuff.replace(/[\n\r]+/g,""); // clean out newlines, so we dont get dups!
     new_stuff = new_stuff.replace(/(.{10})/g,"$1\n");
     $(this).val(new_stuff);
});

这实际上忽略了退格键,因此至少保留了这种交互。