<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>js操作textarea方法集合</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page"> <style type="text/css">
#testlujun {
width: 348px;
height: 80px;
border: #ddd 1px solid;
background: #fafafa;
padding: 5px 10px;
outline: none;
resize: none;
} </style>
<body>
<textarea id="testlujun">abcdefghijklmnopqrstuvwxyz</textarea>
<br>
<input onclick="alert(TT.getCursorPosition(test))" type="button" value="光标位置">
<input onclick="TT.setCursorPosition(test,3)" type="button" value="设置光标到第3位置">
<input onclick="TT.add(test,'你好')" type="button" value="添加'你好'到光标后面">
<input onclick="TT.del(test,2)" type="button" value="删除光标前2个字符">
<input onclick="TT.del(test,-2)" type="button" value="删除光标后2个字符">
<input onclick="TT.sel(test,0,2)" type="button" value="选中字符0-2的位置">
<input onclick="TT.selString(test,'mno')" type="button" value="选中字符'mno'的位置">
</body>
<script type="text/javascript">
// <![CDATA[
var test = document.getElementById('testlujun');
var TT = {
/*
* 获取光标位置
* @Method getCursorPosition
* @param t element
* @return number
*/
getCursorPosition: function(t) {
if (document.selection) {
t.focus();
var ds = document.selection;
var range = ds.createRange();
var stored_range = range.duplicate();
stored_range.moveToElementText(t);
stored_range.setEndPoint("EndToEnd", range);
t.selectionStart = stored_range.text.length - range.text.length;
t.selectionEnd = t.selectionStart + range.text.length;
return t.selectionStart;
} else {
return t.selectionStart;
}
}, /*
* 设置光标位置
* @Method setCursorPosition
* @param t element
* @param p number
* @return
*/
setCursorPosition: function(t, p) {
this.sel(t, p, p);
}, /*
* 插入到光标后面
* @Method add
* @param t element
* @param txt String
* @return
*/
add: function(t, txt) {
var val = t.value;
if (document.selection) {
t.focus();
document.selection.createRange().text = txt;
} else {
var cp = t.selectionStart;
var ubbLength = t.value.length;
var s = t.scrollTop;
// document.getElementById('aaa').innerHTML += s + '<br />';
t.value = t.value.slice(0, t.selectionStart) + txt + t.value.slice(t.selectionStart, ubbLength);
this.setCursorPosition(t, cp + txt.length);
// document.getElementById('aaa').innerHTML += t.scrollTop + '<br />';
firefox = navigator.userAgent.toLowerCase().match(/firefox\/([\d\.]+)/) && setTimeout(function() {
if (t.scrollTop != s) t.scrollTop = s;
},
0) };
}, /*
* 删除光标 前面或者后面的 n 个字符
* @Method del
* @param t element
* @param n number n>0 后面 n<0 前面
* @return
* 重新设置 value 的时候 scrollTop 的值会被清0
*/
del: function(t, n) {
var p = this.getCursorPosition(t);
var s = t.scrollTop;
var val = t.value;
t.value = n > 0 ? val.slice(0, p - n) + val.slice(p) : val.slice(0, p) + val.slice(p - n);
this.setCursorPosition(t, p - (n < 0 ? 0 : n));
firefox = navigator.userAgent.toLowerCase().match(/firefox\/([\d\.]+)/) && setTimeout(function() {
if (t.scrollTop != s) t.scrollTop = s;
},
10)
}, /*
* 选中 s 到 z 位置的文字
* @Method sel
* @param t element
* @param s number
* @param z number
* @return
*/
sel: function(t, s, z) {
if (document.selection) {
var range = t.createTextRange();
range.moveEnd('character', -t.value.length);
range.moveEnd('character', z);
range.moveStart('character', s);
range.select();
} else {
t.setSelectionRange(s, z);
t.focus();
} }, /*
* 选中一个字符串
* @Method sel
* @param t element
* @param s String
* @return
*/
selString: function(t, s) {
var index = t.value.indexOf(s);
index != -1 ? this.sel(t, index, index + s.length) : false;
} }
// ]]>
</script>
</html>

整理自《封装js操作textarea 方法集合(兼容很好)》

最新文章

  1. 使用JSF框架过程中的若干典型问题及其解决方案
  2. 基于JSch的Sftp工具类
  3. iOS 单元测试之XCTest详解(一)
  4. window.location和window.open
  5. Conditional - 编译屏蔽特性
  6. HDUOJ--汉诺塔II
  7. hdu5879 Cure
  8. MVVMLight leaning note
  9. css中position:relative的真正理解
  10. PHP经验集锦
  11. codevs 1709 钉子和小球
  12. Homebrew新一代OS X套件管理工具 高速安装Git
  13. poj2388---求奇数个数字的最中间的数
  14. Promise简介
  15. Vue.js 基础指令实例讲解(各种数据绑定、表单渲染大总结)——新手入门、高手进阶
  16. 【BZOJ1040】骑士(动态规划)
  17. C#代码总结02---使用泛型来获取Asp前台页面全部控件,并进行属性修改
  18. Java NIO3:缓冲区Buffer
  19. Emgu.CV 播放视频-本地文件/RTSP流
  20. WPF 滚动文字控件MarqueeControl

热门文章

  1. cell的自适应
  2. Python_sklearn机器学习库学习笔记(三)logistic regression(逻辑回归)
  3. POJ 1511 - Invitation Cards 邻接表 Dijkstra堆优化
  4. ceph初步快速部署
  5. Fiddler学习之——对Android应用进行抓包
  6. [vb.net]最简单的邮件发送
  7. hdoj 1874 畅通工程续
  8. 理解POCO
  9. 条形码软件开发包Dynamic .NET TWAIN v5.0提供WPF功能
  10. Install Solr+tomcat