0

在读取文本区域的值时,我遇到了保留制表符的问题。我正在添加选项卡,如下所示:

$("#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 读取时似乎没有保留选项卡。

有没有办法解决这个问题或者我采取了错误的方法?

谢谢。

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

4

1 回答 1

0

替换选项卡时不会存储值。尝试这样的事情(我也会把它留&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;
}
于 2012-12-03T14:13:31.567 回答