通过javascript对textarea的编辑和选择
时间:2010-08-28 来源:Cavan
这次大概语法是走Discuz的路线,个人只是作为修改而已,有什么错的,欢迎大家指出!
var BROWSER = {};
var USERAGENT = navigator.userAgent.toLowerCase();
BROWSER.ie = window.ActiveXObject && USERAGENT.indexOf('msie') != -1 && USERAGENT.substr(USERAGENT.indexOf('msie') + 5, 3);
function isUndefined(variable) { //检测参数,判断是否为undefined
return typeof variable == 'undefined' ? true : false;
}
function strlen(str) { //计算字符串长度,主要是IE下有/r/n的长度计算
return (BROWSER.ie && str.indexOf('\n') != -1) ? str.replace(/\r?\n/g, '_').length : str.length;
}
点击即可将UBB代码插入到光标所在位置
function seditor_insetunit(key,text,textend,moveend){
var content = document.getElementById(key+'_content');//编辑对象
content.focus(); //textarea获取焦点
textend = isUndefined(textend) ? '' : textend; //如果textend为未知参数,那么textend为空
moveend = isUndefined(textend) ? 0 : moveend; //如果moveend为未知参数,那么moveend等于空
startlen = strlen(text); //text的长度
endlen =strlen(textend); //textend的长度
if(!isUndefined(content.selectionStart)) { //IE不支持selectitonStart
var opn = content.selectionStart + 0; //光标位置起始点
if(textend != '') { //如果textend不为空
text =text + content.value.substring(content.selectionStart,content.selectionEnd) + textend; //选出高亮的文本,然后加上text,textend;
}
content.value = content.value.substr(0, content.selectionStart) + text + content.value.substr(content.selectionEnd);
if(isUndefined(moveend)) { //如果moveend为未知参数
content.selectionStart = opn +text.length - endlen; //把光标位置聚焦在添加TAG中
content.selectionEnd = opn +text.length- endlen;
}
}else if(document.selection && document.selection.createRange) {//开始写IE
var sel = document.selection.createRange(); //高亮部分的对象
if(textend != '') {
text = text + sel.text + textend;//选出高亮的文本,然后加上text,textend;
}
sel.text = text.replace(/\r?\n/g, '\r\n'); //替换掉然后写入高亮部分的对象文本值
if(!moveend) {
sel.moveStart('character', -endlen); //moveStart 更改高亮部分的对象范围的开始位置
sel.moveEnd('character', -endlen);
}
sel.select(); //光标定位完重新赋予光标位置,不然会显示没有光标,除非在点一次
}
else{
content.value += text;
}
hide_menu('desc_smilies_menu');//此行可无!
}
效果如下:
相关阅读 更多 +