移动端,div contenteditable="true" 超过限制输入字数 substring截取后光标定位到最后面

移动端中,有一个div标签,设置了contenteditable="true":

<div class="ipt-multi" contenteditable="true"></div>

当输入超过500的时候,给超出的字数添加一个样式(颜色为红色)

this.contentNode.bind("keyup change", function () {
            var content = self.getContent();
            if (content.length > 500) {
                // 给文本输入框添加错误样式
                if (content.length > self.MAX_CONTENT_LENGTH) {
                    var newContent = content.substring(0, self.MAX_CONTENT_LENGTH) + "<span style='color: #df0616'>" + content.substring(self.MAX_CONTENT_LENGTH, content.length) + "</span>";
                    $(".ipt-multi").focus().html(newContent);
                    self.po_Last_Div($(".ipt-multi"));
                }
            } 
        });

但是输入后,光标跑到最前面去了,我试着加了这样的一段代码:

po_Last_Div: function(obj) {
            if (window.getSelection) {//ie11 10 9 ff safari
                obj.focus(); //解决ff不获取焦点无法定位问题
                var range = window.getSelection();//创建range
                range.selectAllChildren(obj);//range 选择obj下所有子内容
                range.collapseToEnd();//光标移至最后
            }
            else if (document.selection) {//ie10 9 8 7 6 5
                var range = document.selection.createRange();//创建选择对象
                //var range = document.body.createTextRange();
                range.moveToElementText(obj);//range定位到obj
                range.collapse(false);//光标移至最后
                range.select();
            }
        },
    

报了以下的错误:



feedback-min.js:formatted:1006 Uncaught TypeError: Failed to execute 'selectAllChildren' on 'Selection': parameter 1 is not of type 'Node'.
at Object.po_Last_Div (feedback-min.js:formatted:1006)
at HTMLDivElement.<anonymous> (feedback-min.js:formatted:992)
at HTMLDivElement.n.proxy (base-min.js:1)

请问怎么解决这个错误,从而达到超过限制输入字数光标定位到最后面?

阅读 4.8k
1 个回答
新手上路,请多包涵

clipboard.png
添加“[0]”取对象 self.po_Last_Div($(".ipt-multi")[0]);

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题