通过JavaScript添加后,在从textarea读取时保留选项卡

时间:2012-12-03 12:40:19

标签: javascript jquery html

在阅读textarea的值时,我遇到了保留制表符的问题。 我正在添加标签如下:

$("#code-editor").keydown(function (e) {
    if (e.keyCode === 9) { // tab was pressed
        // get caret position/selection
        var start = this.selectionStart;
        var end = this.selectionEnd;

        var $this = $(this);
        var value = $this.val();

        // set textarea value to: text before caret + tab + text after caret
        $this.val(value.substring(0, start)
                    + "\t"
                    + value.substring(end));

        // put caret at right position again (add one for the tab)
        this.selectionStart = this.selectionEnd = start + 1;

        // prevent the focus lose
        e.preventDefault();
    }
});

正确插入标签并按预期显示在文本区域中。 当我读取textrea的值并尝试用html格式替换制表符时,就会出现问题。

$("#code-editor").keyup(function (e) {
        var value = $(this).val();
        //Do formatting
        var lines = value.split("\n");

        var newvalue = "";

        for (var i = 0; i < lines.length; i++) {
            lines[i].replace(/\t/g, "<span style='padding-left:3em'></span>");
            lines[i] += "<br />";
            newvalue += lines[i];
        }

        $('#editor-displayarea').html(newvalue);
    });

我发现从textarea读取时似乎没有保留选项卡。

有没有解决方法或我采取了错误的做法?

感谢。

更新: 我尝试使用正则表达式的一些变体,如下面的评论中所述,但无济于事。

1 个答案:

答案 0 :(得分:0)

更换标签时,您不存储该值。尝试这样的事情(我也会在{span}中留下&nbsp;):

for (var i = 0; i < lines.length; i++) {
    var replaced = lines[i].replace(/\t/g, "<span style='padding-left:3em'>&nbsp;</span>");
    replaced += "<br />";
    newvalue += replaced;
}