js操作textarea 常用方法总结_javascript技巧

在DOM里面操作textarea里面的字符,是比较麻烦的。
于是我有这个封装分享给大家,测试过IE6,8, firefox ,chrome, opera , safari。兼容没问题。
注意:在firefox下 添加字符串的时候有个bug 就是scrollTop 会等于0,当然解决了,但是不够完美。如果有高手也研究过,麻烦指点下。

复制代码 代码如下:

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;
}
}

时间: 2024-12-20 21:10:47

js操作textarea 常用方法总结_javascript技巧的相关文章

js操作滚动条事件实例_javascript技巧

本文实例讲述了js操作滚动条事件的方法.分享给大家供大家参考.具体分析如下: 之前一直很纳闷,如何监视滚动条的事件,今天终于有点明白了. 下边代码,是监听滚动条只要移动,下方的返回顶部的div显示与隐藏的代码 window.onscroll = function () { var t = document.documentElement.scrollTop || document.body.scrollTop; if (t > 0) { $(".cbbfixed").css(&q

JS操作JSON详细总结_javascript技巧

在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval_r()函数. 2. 使用Function对象来进行返回解析. 在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键.例如: JSON字符串:var str1 = '{ "name": "cxh", "sex": "man" }'; JSON对象:va

js 操作css实现代码_javascript技巧

当我们需要的是一条规则的时候,总不能在每次dom发生变化的时候去执行这个操作,否则也太效率低下了.好在dom中css rules也是可以修改的.不过不同浏览器的对于css rules的接口描述也不同,其中ie中以类似hash table的方式,而ff以数组方式. 从可编程性上说,ie的接口描述更讨程序员喜欢,不过从逻辑上说,ff显然更为合理. 我提供了类似于ie的方式对两套代码进行简单包装,不过ie在dom的css removeRule之后并不能确定同步的把规则兑现.所以最好用规则覆盖的方式而非

XmlUtils JS操作XML工具类_javascript技巧

demo用了点extjs的东西,主要是为了打印json数组出来. js code(XmlUtils.js): 复制代码 代码如下: /**/ function XmlUtils (config) { /*定义私有属性*/ this.isIE = !!(window.attachEvent && !window.opera); this.init(); if(config) { this.dataType = config.dataType == 'json' ? 'json' : 'arr

Js操作Excel常用方法

原文 http://www.cnblogs.com/askyes/archive/2011/08/16/2141490.html Js操作Excel常用方法 1.创建一个新Excel表格     var XLObj = new ActiveXObject("Excel.Application");    var xlBook = XLObj.Workbooks.Add;                         //新增工作簿    var ExcelSheet = xlBook

js调试系列 初识控制台_javascript技巧

写在最开头:其实我以前就在考虑要不要写这个东西,因为这个东西确实不难,但是为什么会有这么多人问,他们问的不是怎么用控制台,而是不知道控制台能干嘛,他们也知道有 console.log 之类的东西,但他们不知道为什么要用这么长的字符串代替 alert 输出信息.在他们眼里 alert 足以.好吧,我承认小小的吐槽了下,不过这个系列我只打算介绍下调试的基本知识,不会涉及太深,因为深入的东西结合js知识,如果你js没到一个境界,我就算教你调试bug,破解一些插件之类的,你也根本不知道我在做什么.我的目

js获取form的方法_javascript技巧

本文实例讲述了js获取form的方法.分享给大家供大家参考.具体如下: 先来看下面代码: <html> <head> <scirpy> window.onload=function(){ var f1=document.f1; var f2=document.forms[1]; alert(f2.id); var f3=document.forms['f1']; } </script> </head> <body> <form

js操作textarea方法集合封装(兼容IE,firefox)_javascript技巧

注意:在firefox下 添加字符串的时候有个bug 就是scrollTop 会等于0,当然解决了,但是不够完美.如果有高手也研究过,麻烦指点下. 完整测试代码: 复制代码 代码如下: <textarea id="testlujun" style="width: 300px; height: 50px;">abcdefghijklmnopqrstuvwxyz</textarea><br /><input onclick=&q

JS中FRAME的操作问题实例分析_javascript技巧

本文实例探讨了JS中FRAME的操作问题,分享给大家供大家参考.具体分析如下: 以上图为例,在这里把frame之间的互相操作简单列为:1变量2方法3页面之间元素的互相获取. 一.  首先从 父(frameABC)------->子(frameA,frameB,frameC) ① 访问变量名name 假如在frameABC中操作那么可以: 复制代码 代码如下: window.frames("frameA").contentWindow.name 或者 复制代码 代码如下: docu