<html><br />
<head><br />
<title>TEST</title><br />
<style><br />
body,td{<br />
font-family: verdana, arial, helvetica, sans-serif;<br />
font-size: 12px;<br />
}<br />
</style><br />
<script type="text/javascript"><br />
var start=0;<br />
var end=0;<br />
function add(){ <br />
var textBox = document.getElementById("ta");<br />
var pre = textBox.value.substr(0, start);<br />
var post = textBox.value.substr(end);<br />
textBox.value = pre + document.getElementById("inputtext").value + post;<br />
}<br />
function savePos(textBox){<br />
//如果是Firefox(1.5)的话,方法很简单<br />
if(typeof(textBox.selectionStart) == "number"){<br />
start = textBox.selectionStart;<br />
end = textBox.selectionEnd;<br />
}<br />
//下面是IE(6.0)的方法,麻烦得很,还要计算上'\n'<br />
else if(document.selection){<br />
var range = document.selection.createRange();<br />
if(range.parentElement().id == textBox.id){<br />
// create a selection of the whole textarea<br />
var range_all = document.body.createTextRange();<br />
range_all.moveToElementText(textBox);<br />
//两个range,一个是已经选择的text(range),一个是整个textarea(range_all)<br />
//range_all.compareEndPoints()比较两个端点,如果range_all比range更往左(further to the left),则 //返回小于0的值,则range_all往右移一点,直到两个range的start相同。<br />
// calculate selection start point by moving beginning of range_all to beginning of range<br />
for (start=0; range_all.compareEndPoints("StartToStart", range) < 0; start++)<br />
range_all.moveStart('character', 1);<br />
// get number of line breaks from textarea start to selection start and add them to start<br />
// 计算一下\n<br />
for (var i = 0; i <= start; i ++){<br />
if (textBox.value.charAt(i) == '\n')<br />
start++;<br />
}<br />
// create a selection of the whole textarea<br />
var range_all = document.body.createTextRange();<br />
range_all.moveToElementText(textBox);<br />
// calculate selection end point by moving beginning of range_all to end of range<br />
for (end = 0; range_all.compareEndPoints('StartToEnd', range) < 0; end ++)<br />
range_all.moveStart('character', 1);<br />
// get number of line breaks from textarea start to selection end and add them to end<br />
for (var i = 0; i <= end; i ++){<br />
if (textBox.value.charAt(i) == '\n')<br />
end ++;<br />
}<br />
}<br />
}<br />
document.getElementById("start").value = start;<br />
document.getElementById("end").value = end;<br />
}<br />
</script><br />
</head><br />
<body><br />
<form action="a.cgi"><br />
<table border="1" cellspacing="0" cellpadding="0"><br />
<tr><br />
<td>start: <input type="text" id="start" size="3"/></td><br />
<td>end: <input type="text" id="end" size="3"/></td><br />
</tr><br />
<tr><br />
<td colspan="2"><br />
<textarea id="ta" onKeydown="savePos(this)" <br />
onKeyup="savePos(this)" <br />
onmousedown="savePos(this)" <br />
onmouseup="savePos(this)" <br />
onfocus="savePos(this)" <br />
rows="14" cols="50"></textarea><br />
</td><br />
</tr><br />
<tr><br />
<td><input type="text" id="inputtext" /></td><br />
<td><input type="button" onClick="add()" value="Add Text"/></td><br />
</tr><br />
</table><br />
</form><br />
</body><br />
</html><br />
<br />