借阅
我注意到现在SF的评论框已经是高度自适应了,也就是说无论你输入多少个字也不会有那个讨厌的滚动条了,这点很好。我大概看了一下它的技术实现,好像是把textarea替换成一个div,然后把当前的div的contentEditable设置为true。这个实现跟quora的实现比较像。
但是这种实现有个问题,就是对浏览器的支持不是太好,当然SF是明确不支持IE6的,其它版本的IE我手头没有,不知道支持情况如何。就通常情况来说,ie对contentEditable需要做特别多hack才能保持兼容。另一个浏览器就是opera,opera对div的contentEditable支持是最近才开始的。
另一种实现就是,你在网上搜索就会得到的答案,用代码来说话就是
$('textarea').keyup(function () {
$(this).height(this.scrollHeight);
});基本上所有的jquery插件核心都是这段代码,但是实际上它的效果非常坑爹
1.它响应的是keyup事件,因此也就是说肯定会有延迟。其视觉表现就是,先出现一个滚动条,然后这个文本框再被拉长。这样的体验非常别扭。
2.它也有兼容性问题,再某些浏览器上(比如safari),它的scrollHeight会莫名奇妙地多出一些,看起来非常奇怪。
以上就是我对这个功能的分析,我想要的就是一个普通的文本框,在大部分浏览器(可以忽略ie6)下都能敏捷地响应拉伸。如果你是用contentEditable实现,你需要支持以下功能
1.拷贝文字时只拷贝纯文本,html会被过滤掉
2.换行支持良好
3.支持undo和redo