账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    pre标签添加contenteditable="true"属性,换行时看不见光标
    34
    0

    设置了ctrl+enter换行, 换行方式为在光标处添加'r'
    但是不停换行会出现光标在可视窗口外的情况,滚动条不跟随光标滚动,请问应该怎么解决?代码如下

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <pre contenteditable="true" style="width: 500px;height: 500px;border:1px #000 solid;overflow-y: auto"></pre>
    </body>
    <script>
    document.querySelector('pre').onkeydown = function($event){
        var keycode = window.event ? $event.keyCode : $event.which;
        var evt = $event || window.event;
        // 回车-->发送消息
        if (keycode == 13 && !(evt.ctrlKey)) {
            // 发送消息的代码
            $event.preventDefault();
            return false;
        }
        // ctrl+回车-->换行
        if (evt.ctrlKey && evt.keyCode == 13) {
            insertContent('\r')
            return false;
        }
    }
    function insertContent(content){
        if (!content) {//如果插入的内容为空则返回
            return
        }
        var sel = null;
        if (document.selection) {//IE9以下
            sel = document.selection;
            sel.createRange().pasteHTML(content);
        } else {
            sel = window.getSelection();
            if (sel.rangeCount > 0) {
                var range = sel.getRangeAt(0);      //获取选择范围
                range.deleteContents();             //删除选中的内容
                var el = document.createElement("div"); //创建一个空的div外壳
                window.hahaha = el;
                el.innerHTML = content;                 //设置div内容为我们想要插入的内容。
                var frag = document.createDocumentFragment();//创建一个空白的文档片段,便于之后插入dom树
    
                var node = el.firstChild;
                var lastNode = frag.appendChild(node);
                range.insertNode(frag);                 //设置选择范围的内容为插入的内容
                var contentRange = range.cloneRange();  //克隆选区
                contentRange.setStartAfter(lastNode);          //设置光标位置为插入内容的末尾
                contentRange.collapse(true);                   //移动光标位置到末尾
                sel.removeAllRanges();                  //移出所有选区
                sel.addRange(contentRange);             //添加修改后的选区
            }
        }
    }
    </script>
    </html>
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 离人未归 普通会员 1楼

      在CSS中,可以使用contenteditable属性来设置文本的可编辑性。但是,这个属性只能在支持CSS3的浏览器中使用。

      contenteditable属性被设置为true时,如果用户试图在非文本区域编辑,浏览器将阻止他们编辑。此外,当用户将文本焦点移动到非文本区域时,用户可能无法看到光标。

      对于您的问题,可能是由于文本编辑器没有正确地处理contenteditable属性。我建议您检查您的文本编辑器是否有错误的设置或选项。

      如果您使用的是支持contenteditable属性的文本编辑器,您可以尝试以下方法:

      1. 在编辑器中禁用contenteditable属性。
      2. 确保文本编辑器支持contenteditable属性。

      例如,在Microsoft Word中,您可以在编辑器的属性窗口中禁用contenteditable属性。在其他文本编辑器中,您可能需要查找特定的选项或设置来实现这一功能。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部