js实现的光标位置工具函数示例
本文实例讲述了js实现的光标位置工具函数。分享给大家供大家参考,具体如下:
这里介绍的一款textarea中光标位置工具函数的例子。
html代码:
<p>文本框:</p> <textareaname=""id="textarea"cols="30"rows="10"> sASASADASDasfaDFDsfsDFAfdFADf </textarea> <buttontype="button"id="setSelectText">选中特定范围的文本</button> <buttontype="button"id="insertAfterText">在光标后插入文本</button> <br> <hr> <br> <inputtype="number"name=""id="input"> <buttontype="button"id="setCurPosBtn">设置光标位置</button> <br> <hr> <br> <pid="selectText">我是一段可以选中的文字,请打开控制台查看。我是一段可以选中的文字,请打开控制台查看。我是一段可以选中的文字,请打开控制台查看。</p>
js代码:
/**
*光标位置组件
*##selectRange对象的方法:
*(1)selectRange.of(ele)[创建光标位置获取的新对象]
参数:
ele{{JavaScriptDOM}}光标所在的元素,原生JavaScriptDOM
*(2)selectRange.getCurPos()[获取当前坐标位置]
*(3)selectRange.setCurPos(pos)[设置当前光标位置]
参数:
pos{{Int}}当前光标位置
*(4)selectRange.getSelectText()[获取选中文字]
*(5)selectRange.setSelectText(startPos,endPos)[选中特定范围的文本(只限于textarea和input)]
*参数:
startPos{{Int}}起始位置
endPos{{Int}}终点位置
*(6)selectRange.insertAfterText(value)[在光标后插入文本]
*参数:
value{{String}}要插入的文本
*
*
*##使用实例:
*selectRange.of(EleDom).getCurPos();//获取当前坐标位置
*selectRange.of(EleDom).setCurPos(pos);//设置当前光标位置为pos
*selectRange.of(EleDom).getSelectText();//获取选中文字
*selectRange.of(EleDom).setSelectText(startPos,endPos);//选中startPos到endPos范围的文本
*selectRange.of(EleDom).insertAfterText(value);//在光标后插入值为value的文本
*/
varselectRange=function(ele){
this.__element=ele;
};
//创建光标位置获取的新对象
selectRange.of=function(ele){
if(ele){
returnnewselectRange(ele);
}else{
return{};
}
};
selectRange.prototype={
constructor:selectRange,
//获取当前坐标位置
getCurPos:function(){
var_this=this,
textDom=_this.__element;
//获取光标位置
varcursorPos=0;
if(document.selection){
//IESupport
textDom.focus();
varselectRange=document.selection.createRange();
selectRange.moveStart('character',-textDom.value.length);
cursorPos=selectRange.text.length;
}elseif(textDom.selectionStart||textDom.selectionStart=='0'){
//Firefoxsupport
cursorPos=textDom.selectionStart;
}
returncursorPos;
},
/**
*设置当前光标位置
*参数:
*pos[Int]当前光标位置
*/
setCurPos:function(pos){
var_this=this,
textDom=_this.__element;
if(textDom.setSelectionRange){
//IESupport
textDom.focus();
textDom.setSelectionRange(pos,pos);
}elseif(textDom.createTextRange){
//Firefoxsupport
varrange=textDom.createTextRange();
range.collapse(true);
range.moveEnd('character',pos);
range.moveStart('character',pos);
range.select();
}
},
//获取选中文字
getSelectText:function(){
var_this=this,
textDom=_this.__element,
userSelection,
text="";
if(window.getSelection){
//Firefoxsupport
userSelection=window.getSelection();
}elseif(document.selection){
//IESupport
userSelection=document.selection.createRange();
}
if(!(text=userSelection.text)){
text=userSelection;
}
returntext;
},
/**
*选中特定范围的文本(只限于textarea和input)
*参数:
*startPos[Int]起始位置
*endPos[Int]终点位置
*/
setSelectText:function(startPos,endPos){
var_this=this,
textDom=_this.__element,
startPos=parseInt(startPos),
endPos=parseInt(endPos),
textLength=textDom.value.length;
if(textLength){
if(!startPos){
startPos=0;
}
if(!endPos){
endPos=textLength;
}
if(startPos>textLength){
startPos=textLength;
}
if(endPos>textLength){
endPos=textLength;
}
if(startPos<0){
startPos=textLength+startPos;
}
if(endPos<0){
endPos=textLength+endPos;
}
if(textDom.createTextRange){
//IESupport
varrange=textDom.createTextRange();
range.moveStart("character",-textLength);
range.moveEnd("character",-textLength);
range.moveStart("character",startPos);
range.moveEnd("character",endPos);
range.select();
}else{
//Firefoxsupport
textDom.setSelectionRange(startPos,endPos);
textDom.focus();
}
}
},
/**
*在光标后插入文本
*参数:
*value[String]要插入的文本
*/
insertAfterText:function(value){
var_this=this,
textDom=_this.__element,
selectRange;
if(document.selection){
//IESupport
textDom.focus();
selectRange=document.selection.createRange();
selectRange.text=value;
textDom.focus();
}elseif(textDom.selectionStart||textDom.selectionStart=='0'){
//Firefoxsupport
varstartPos=textDom.selectionStart;
varendPos=textDom.selectionEnd;
varscrollTop=textDom.scrollTop;
textDom.value=textDom.value.substring(0,startPos)+value+textDom.value.substring(endPos,textDom.value.length);
textDom.focus();
textDom.selectionStart=startPos+value.length;
textDom.selectionEnd=startPos+value.length;
textDom.scrollTop=scrollTop;
}
else{
textDom.value+=value;
textDom.focus();
}
}
};
//===============================================
//实例代码
vartextareaDom=document.querySelector("#textarea"),
setCurPosInput=document.querySelector("#input"),
setCurPosBtn=document.querySelector("#setCurPosBtn"),
selectText=document.querySelector("#selectText"),
setSelectTextBtn=document.querySelector("#setSelectText"),
insertAfterTextBtn=document.querySelector("#insertAfterText");
//获取当前光标位置
textareaDom.addEventListener("keydown",function(){
console.log("getCurPos:"+selectRange.of(textareaDom).getCurPos());
},false);
//设置当前光标位置
setCurPosBtn.addEventListener("click",function(){
varcurPos=parseInt(setCurPosInput.value);
console.log("curPos:"+curPos);
selectRange.of(textareaDom).setCurPos(curPos);
},false);
//获取选中文字
selectText.addEventListener("mouseup",function(){
console.log("selectText:"+selectRange.of(this).getSelectText());
});
//选中特定范围的文本
setSelectTextBtn.addEventListener("click",function(){
selectRange.of(textareaDom).setSelectText(0,21);
},false);
//在光标后插入文本
insertAfterTextBtn.addEventListener("click",function(){
varinsertText="===helloworld,I'minsertcontent.===";
selectRange.of(textareaDom).insertAfterText(insertText);
},false);
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript中json操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。