textarea 高度自适应和光标控制

相关知识点

textatea 输入框特点

  • 具有默认的宽度和高度,输入内容到边会自动换行,可设置 white-space:pre; 使其水平不会自动换行除非按下enter键。
  • 无论是否设置高度,输入内容高度超过会出现滚动条,可监听其 scrollHeight 使其高度随内容高度自适应。
  • 输入中按下enter换行时根据浏览器不同会在光标处插入换行符 ‘/r/n’ 或 ‘/n’。
  • 插入的 html 代码都会被转义

1.高度自适应

<textarea id="text"></textarea> 
<script>
  var text = document.getElementById("text")
  text.oninput = function(){
    
    //高度自适应
    this.style.height = 'auto'
    if(this.scrollHeight > this.offsetHeight){
    
      this.style.height = this.scrollHeight + "px"
    }
    //宽度自适应,前提设置 white-space:pre;
    this.style.width = 'auto'
    if(this.scrollWidth > this.offsetWidth){
    
      this.style.width = this.scrollWidth + "px"
    }
  }
</script>

2.获取光标位置

function getCP (el) {
   
  el.focus ();       
  if (document.selection) {
      //低版本IE
    var range = document.selection.createRange();
    range .moveStart ('character', -el.value.length);
    return range.text.length;
  }else if (el.selectionStart != null ){
     //有些input类型不支持,过滤
    return el.selectionStart;
  }
}

3.设置光标位置

/*
* el    输入框元素
* pos   位置下标,若为'last'则移动到末尾
*/
function setCP(el, pos){
   
  el.focus(); 
  if(pos == 'last'){
   
  	pos = el.value.length
  }
  if(el.setSelectionRange) {
   
    el.selectionStart = el.selectionEnd = pos;   
  }else if (el.createTextRange) {
    //IE低版本浏览器
    var range = el.createTextRange();
    range.collapse(true);
    range.moveEnd('character', pos);
    range.moveStart('character', pos);
    range.select();
  }
}

4.获取选中的文本:可以获取页面任何元素中被鼠标选中的内容,不仅仅是输入框。

function getSelectText() {
   
  if (document.selection) {
    //低版本IE
    return document.selection.createRange().text;
  }else{
   
  	return window.getSelection().toString();
  	//return el.value.substring(el.selectionStart,el.selectionEnd);
  }
}

5.选中特定范围的文本

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值