varstart=0;
varend=0;
functionadd(){
vartextBox=document.getElementById("ta");
varpre=textBox.value.substr(0,start);
varpost=textBox.value.substr(end);
textBox.value=pre+document.getElementById("inputtext").value+post;
}
functionsavePos(textBox){
//如果是Firefox(1.5)的话,方法很简单
if(typeof(textBox.selectionStart)=="number"){
start=textBox.selectionStart;
end=textBox.selectionEnd;
}
//下面是IE(6.0)的方法,麻烦得很,还要计算上'n'
elseif(document.selection){
varrange=document.selection.createRange();
if(range.parentElement().id==textBox.id){
//createaselectionofthewholetextarea
varrange_all=document.body.createTextRange();
range_all.moveToElementText(textBox);
//两个range,一个是已经选择的text(range),一个是整个textarea(range_all)
//range_all.compareEndPoints()比较两个端点,如果range_all比range更往左(furthertotheleft),则//返回小于0的值,则range_all往右移一点,直到两个range的start相同。
//calculateselectionstartpointbymovingbeginningofrange_alltobeginningofrange
for(start=0;range_all.compareEndPoints("StartToStart",range)<0;start++)
range_all.moveStart('character',1);
//getnumberoflinebreaksfromtextareastarttoselectionstartandaddthemtostart
//计算一下n
for(vari=0;i<=start;i++){
if(textBox.value.charAt(i)=='n')
start++;
}
//createaselectionofthewholetextarea
varrange_all=document.body.createTextRange();
range_all.moveToElementText(textBox);
//calculateselectionendpointbymovingbeginningofrange_alltoendofrange
for(end=0;range_all.compareEndPoints('StartToEnd',range)<0;end++)
range_all.moveStart('character',1);
//getnumberoflinebreaksfromtextareastarttoselectionendandaddthemtoend
for(vari=0;i<=end;i++){
if(textBox.value.charAt(i)=='n')
end++;
}
}
}
document.getElementById("start").value=start;
document.getElementById("end").value=end;
}
下面是在页面中调用js代码的方法:
start: end:
onmousedown="savePos(this)"
onmouseup="savePos(this)"
onfocus="savePos(this)"
rows="14"cols="50">
此代码的原文是:http://blog.csdn.net/liujin4049/archive/2006/09/19/1244065.aspx,在此谢过!
这段js代码同时支持IE和Firefox,甚是精彩,可见此人js功力深厚啊,呵呵。
Btw:听说Firefox现在的市场占有率已经达到17%了,而IE8也快出来了,浏览器之间又会掀起一场你死我活的争斗,而这种争斗可以使浏览器的解析标准会越来越规范,我们写代码也会越来越省事,这实在是一件值得高兴的事。