最近做项目遇见了这个自适应高度的问题,也在网上找了些资料,大多选择用DIV模拟textarea,但是这样就有安全性的问题,因为你是可以直接将HTML代码输入进去的。

接下来介绍的这种办法是采用两个textarea,其中一个textarea设置其absolute,设置其不可见。当输入文本的textarea的值变化时,将原本的textarea中的值copy到新的 textarea中,这样可以准确计算高度(注意在copy节点的时候新旧textarea的宽度是一样的)。

为什么不直接用原textarea的高度呢,应该是存在延迟的问题吧。至于网上很多直接用文字长度除以宽度从而获得高度的做法只适合于等宽字体,数字标点什么的宽度问题,这样自然会造成很大的误差啊。

这里展示一下textarea中的textchange函数

   $scope.TextChange=function(){
var element=document.getElementById("getmessage");
var other=document.getElementById("clonemessage");
if(!other){
other=element.cloneNode(true);
other.setAttribute("id","clonemessage");
var parent=element.parentNode;
parent.appendChild(other);
angular.element(other).css({
"min-height": 0,
"height": 0,
"visibility": "hidden",
"position":"absolute",
"width":element.offsetWidth+"px",
"top": 0
})
}
other.value=element.value;
element.style.height=other.scrollHeight+"px";
}

因为这里项目中用的angular框架,所以里面带一下angular元素。需要注意的是在设置宽度和高度时要加单位‘px’,而且在JS中获取元素的宽度和高度用的(元素名).offserWidth,

在设置元素宽度和高度时用的是(元素名).style.height。

这里还有一个JQuery的版本

function autoHeight() {
var $other=$(this).parent().find(".autoHeightClone");
if($other.length<=0){
$other=$(this).clone();
$other.addClass("autoHeightClone")
.appendTo($(this).parent());
$other.css({
"min-height": 0,
"height": 0,
"visibility": "hidden",
"position":"absolute",
"width": $(this).outerWidth(),
"top": 0
});
}
$other.val(this.value);
$(this).innerHeight($other[0].scrollHeight);
}

textarea自适应高度的更多相关文章

  1. textarea自适应高度,div模仿textarea可编辑实现自适应高度,placeholder使用图标

    1.textarea自适应高度,placeholder使用图标 自适应高度,有很多种办法: 1)jq: $("textarea").on("input",fun ...

  2. div模拟textarea自适应高度

    之前在公司做项目的时候,有这么一个需求,要我写一个评论框,可以随着评论的行数增加而自动扩大,最开始我想用textarea实现,但是后来尝试后发现textarea并不适合,textarea的高度不会随着 ...

  3. 简单实现一个textarea自适应高度

    textarea自适应的实现方法很多,原理其实比较简单:监听textarea的input或者键盘事件,获取元素的scrollHeight,重置textarea元素的高度. 预览地址:textarea ...

  4. js实现textarea自适应高度

    html结构: <div class="container" id="container"> <div class="text-wr ...

  5. jquery文本框textarea自适应高度

    浏览器中默认的文本框是不能根据内容的增多变高,只能固定高度有滚动条,体验不是很好,找了很多方法兼容都不行,总算找到个兼容良好的方法: <body> <textarea id=&quo ...

  6. Textarea自适应高度 JS实现,兼容IE6\7\8\9\10\11

    <!DOCTYPE html> <html> <head> <title>autoresizing textarea</title> < ...

  7. textarea 自适应高度

    试了好多方法,包括百度了好多.一旦接口获取的内容,就不好用了.有时候就是脑袋转不过来,想了好久的方法居然那么简单,然后,脑洞大开,忽然想到还可以这样弄, 很简单,两句话 var textareaHei ...

  8. div实现自适应高度的textarea,实现angular双向绑定

    相信不少同学模拟过腾讯的QQ做一个聊天应用,至少我是其中一个. 过程中我遇到的一个问题就是QQ输入框,自适应高度,最高高度为3row. 如果你也像我一样打算使用textarea,那么很抱歉,你一开始就 ...

  9. Jquery实现textarea根据文本内容自适应高度

    本文给大家分享的是Jquery实现textarea根据文本内容自适应高度,这些在平时的项目中挺实用的,所以抽空封装了一个文本框根据输入内容自适应高度的插件,这里推荐给小伙伴们. autoTextare ...

随机推荐

  1. 解决php文件乱码

    header ( "Content-Type:text/html;charset=utf-8" );//定义文件为UTF-8编码

  2. eclipse + python dev

    错误:Project interpreter not specified解决方法 http://blog.csdn.net/magictong/article/details/7288732 安装Py ...

  3. Qt之指针与float--setNum使用

    案例: quint8 ad[8] = {0,100,150,200,0,220,230,250}; QString str; QString str2; ab = (float)(*((float * ...

  4. Ajax 语法

    /*** * ajax语法 * * ***/ $.ajax({ async:false, //同步请求 url:"XXXXX.do",//请求后台地址 data: {"p ...

  5. 生成linux shadow文件

    -salt $(< /dev/urandom ) -stdin $$cVcjk1yK$sfdBsYIEr800Mdr3PsICe0 $$oBrzawaF$WeVJjd2eyoEEmJykNtMH ...

  6. php 网页 301 跳转

    php 跳转 if('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] =="http://www.nikemalaysia.co ...

  7. matlab初学之textread

    文章出处:http://blog.sina.com.cn/s/blog_9e67285801010bju.html 基本语法是: [A,B,C,-] = textread(filename,forma ...

  8. ObjectiveC-MQTT初次接触

    首先iOS与mac端用的框架是:https://github.com/ckrey/MQTT-Client-Framework 使用CocoaPods导入 pod 'MQTTClient/Websock ...

  9. IOC和Aop使用的扩展

    下面还有静态代理和动态代理 1.构造注入 lib包: 在entity包下新建一个实体类User 代码: package cn.happy.entity; public class User { pri ...

  10. 位置指纹(LF)定位技术简介-室内定位

        信号的多径传播对环境具有依赖性,呈现出非常强的特殊性.对于每个位置而言,该位置上信道的多径结构是惟一的,终端发射的无线电渡经过反射和折射,产生与周围环境密切相关的特定模式的多径信号,这样的多径 ...