關於 SF 編輯器 Tab 鍵行爲的建議

bf
  • 8k

SF 編輯器選中多行文本沒有像 Sublime Text 那樣自動每行縮進一格,很不方便,經常導致丟失文字(好不容易寫好的大段代碼被替換成了 Tab)

正好我在另一個回答實現了這個功能,可以參考一下(代碼很亂,還沒整理,見諒)

var el = document.querySelector('textarea');

el.addEventListener("keydown", function(e) {
    var keyCode = e.keyCode || e.which;

    if (keyCode === 9) {
        var start = el.selectionStart,
            end = el.selectionEnd, 
            value = el.value;

        var lineStart = value.lastIndexOf('\n', start),
            lineEnd = value.indexOf('\n', end),
            offset = 0;

        if (lineStart === -1) lineStart = 0;
        if (lineEnd === -1) lineEnd = value.length;

        if (lineStart === lineEnd);
        else if (lineStart !== 0) lineStart += 1;

        lines = value.substring(lineStart, lineEnd).split('\n');

        if (lines.length > 1) {
            offset = lines.length;
            lines = '\t' + lines.join('\n\t');

            el.value = value.substring(0, lineStart) + lines + value.substring(lineEnd);

            el.selectionStart = start + 1;
            el.selectionEnd = end + offset;
        } else {
            offset = 1;

            el.value = value.substring(0, start) + '\t' + value.substring(end);

            el.selectionStart = el.selectionEnd = start + offset;
        }

        e.preventDefault();
    }
})
回复
阅读 2.2k
2 个回答
✓ 已被采纳

谢谢,很好的建议。
开发环境已修复,今晚上线。
并添加了对shift+tab反缩进的支持。
你的代码很有用。再次感谢。

谢耳朵爱唠叨
  • 3
新手上路,请多包涵
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

logo
社区建设
子站问答

SegmentFault 社区建设建议反馈讨论

访问社区
宣传栏