div模拟文本输入框做字数限制 用substr限制 当字数达到后光标会回到开头 用range对象限制但是删除的时候会从末尾开始删除 求大神帮忙看看 给点思路

Web_monsterStudent 2017-03-14 10:10:05
<div class="textarea textareaplace" id="userinfo" contenteditable="true" onkeydown="keyD(this);" onkeyup="keyAction(this);" oncopy="keyCop();" onpaste="keyPas()"></div>

js代码
var textbox = document.getElementById('userinfo'),
g_selectNum=0,
sel = window.getSelection(),
range = document.createRange();
function keyD(obj){ //按下事件
var a=textbox.innerHTML;

var textA=textbox.innerText.substr(0,20);
range.selectNodeContents(textbox); //将div节点内容加进range内
range.collapse(false);
sel.removeAllRanges();
sel.addRange(range); //j将range对象加入文本域
}
function keyPas(){
var textA=textbox.innerText.substr(0,20);
setTimeout(function(){
var a=textbox.innerHTML;
textbox.innerText=a.replace(/<span.*">|<\/span>/g, ""); //将复制内容中span标签替换
range.selectNodeContents(textbox);
range.collapse(false);
sel.removeAllRanges();
sel.addRange(range);
},300)
};
function keyCop(obj){
var textA=textbox.innerText.substr(0,20);
a_num=textA.length;
var selectCon=sel.toString();
g_selectNum=selectCon.length;
}
function keyAction(obj) {
var textA=textbox.innerText.substr(0,20);
a_num=textA.length;
a_arr[1]=a_num;
textbox.innerText=textA;
range.selectNodeContents(textbox);
range.collapse(false);
sel.removeAllRanges();
sel.addRange(range);
}
...全文
686 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 4 楼 ggwpgg1257 的回复:
function set_focus(el) { el=el[0]; //jquery 对象转dom对象 el.focus(); if($.support.msie) { var range = document.selection.createRange(); this.last = range; range.moveToElementText(el); range.select(); document.selection.empty(); //取消选中 } else { var range = document.createRange(); range.selectNodeContents(el); range.collapse(false); var sel = window.getSelection(); sel.removeAllRanges(); sel.addRange(range); } } 这么久了,想必各位都找到方法了,回复一下,方便后来人。这也是我从别的地方找到的,找了好久,具体在哪找的也忘了(尴尬!)。如非法转载,私信,会立即删除
引用 4 楼 ggwpgg1257 的回复:
function set_focus(el) { el=el[0]; //jquery 对象转dom对象 el.focus(); if($.support.msie) { var range = document.selection.createRange(); this.last = range; range.moveToElementText(el); range.select(); document.selection.empty(); //取消选中 } else { var range = document.createRange(); range.selectNodeContents(el); range.collapse(false); var sel = window.getSelection(); sel.removeAllRanges(); sel.addRange(range); } } 这么久了,想必各位都找到方法了,回复一下,方便后来人。这也是我从别的地方找到的,找了好久,具体在哪找的也忘了(尴尬!)。如非法转载,私信,会立即删除
万分感谢
qq_39504719 2019-07-22
  • 打赏
  • 举报
回复
既然是模拟的输入框,当字数达到限制数量之后,直接将contenteditable属性置为false即可,没必要这么麻烦呀!
qq_39504719 2019-07-22
  • 打赏
  • 举报
回复
既然是模拟的输入框,当字数达到限制数量之后,直接将contenteditable属性置为false即可,没必要这么麻烦呀!
ggwpgg1257 2018-07-03
  • 打赏
  • 举报
回复
function set_focus(el)
{
el=el[0]; //jquery 对象转dom对象
el.focus();
if($.support.msie)
{
var range = document.selection.createRange();
this.last = range;
range.moveToElementText(el);
range.select();
document.selection.empty(); //取消选中
}
else
{
var range = document.createRange();
range.selectNodeContents(el);
range.collapse(false);
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
}
}
这么久了,想必各位都找到方法了,回复一下,方便后来人。这也是我从别的地方找到的,找了好久,具体在哪找的也忘了(尴尬!)。如非法转载,私信,会立即删除
Web_monsterStudent 2017-03-15
  • 打赏
  • 举报
回复
无奈 找不到解决办法 想到了折中方法 当到达最大限度是 让div失焦 有大神解决了的求回复或 通知一下
Web_monsterStudent 2017-03-15
  • 打赏
  • 举报
回复
看到网上有好多 关于div模拟输入框做字数限制的 但是他们都没有提到 用innerHTML.length 判断长度 并把innerHTML字符串赋给div时 会出现光标默认回到 第一个字符位置 这种情况 难道是我写法错误?? 我想解决的是光标位置问题 也十分感谢楼上给我提供的资料 虽然我并没有找到答案 谢谢
业余草 2017-03-14
  • 打赏
  • 举报
回复
<div id="txt" contenteditable="true"  border: 1px solid #E1E1E1; overflow: auto;">
业余草 CODE大全 http://bbs.csdn.net/topics/390781214

39,087

社区成员

发帖
与我相关
我的任务
社区描述
HTML5是构建Web内容的一种语言描述方式。HTML5是互联网的下一代标准,是构建以及呈现互联网内容的一种语言方式.被认为是互联网的核心技术之一。
社区管理员
  • HTML5社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧