<html>
<head><META http-equiv=\"Content-Type\" content=\"text/html; charset=shift_jis\">
<title>Test</title>
<script language=javascript>
var http_request = false;
var strData;function set()
{
getData(); var txt = document.forms["Fm"].textAr;
var s = txt.value.indexOf(document.selection.createRange().text);
var n = document.selection.createRange().text.length;
txt.value = strData;
txt.focus();
var r = document.selection.createRange();
r.collapse(false);
r.moveStart("character", -txt.value.length+s);
r.moveEnd("character", -txt.value.length+n+s);
r.select();
}function getData(){
//strData = window.document.TestApplet.GetStringData();
strData = 1234567890;
}
</script>
</head>
<body>
<form method = "post" action = "" name = "Fm">
<input type = "button" value = "更新" onclick = "set()">
<textarea name = "textAr" rows = 10 cols = 140>123456
</textarea><input type = hidden name = "btnH">
</form>
</body>
</html>
<head><META http-equiv=\"Content-Type\" content=\"text/html; charset=shift_jis\">
<title>Test</title>
<script language=javascript>
var http_request = false;
var strData;function set()
{
getData(); var txt = document.forms["Fm"].textAr;
var s = txt.value.indexOf(document.selection.createRange().text);
var n = document.selection.createRange().text.length;
txt.value = strData;
txt.focus();
var r = document.selection.createRange();
r.collapse(false);
r.moveStart("character", -txt.value.length+s);
r.moveEnd("character", -txt.value.length+n+s);
r.select();
}function getData(){
//strData = window.document.TestApplet.GetStringData();
strData = 1234567890;
}
</script>
</head>
<body>
<form method = "post" action = "" name = "Fm">
<input type = "button" value = "更新" onclick = "set()">
<textarea name = "textAr" rows = 10 cols = 140>123456
</textarea><input type = hidden name = "btnH">
</form>
</body>
</html>
{
sel = document.selection.createRange().text;
getData();
document.getElementById("textAr").innerText=strData ;
var rng = document.getElementById("textAr").createTextRange();
rng.findText(sel);
rng.select();
}
if( sel != "" ){
rng.findText(sel);
rng.select();
}
另外:稻草人的代码,如果一开始选者几个数字,后来随着textarea数量的增加,选着的代码超过1行,结果回去的地方不对了。。
把document.getElementById("textAr").innerText+=strData ;
改成:
document.getElementById("textAr").innerText+=strData ;
<html>
<head><META http-equiv=\"Content-Type\" content=\"text/html; charset=shift_jis\">
<title>Test</title>
<script language=javascript>
var http_request = false;
var strData;function set()
{
getData(); var txt = document.forms["Fm"].textAr;
var s = txt.value.indexOf(document.selection.createRange().text);
var n = document.selection.createRange().text.length;
txt.value = strData;
txt.focus();
var r = document.getElementById("textAr").createTextRange();
r.collapse(false);
r.moveStart("character", -txt.value.length+s);
r.moveEnd("character", -txt.value.length+n+s);
r.select();
}function getData(){
//strData = window.document.TestApplet.GetStringData();
strData = 1234567890;
}
</script>
</head>
<body>
<form method = "post" action = "" name = "Fm">
<input type = "button" value = "更新" onclick = "set()">
<textarea name = "textAr" rows = 10 cols = 140>123456
</textarea><input type = hidden name = "btnH">
</form>
</body>
</html>
这个有些部分可以参考fantiny兄弟的一个帖子
http://community.csdn.net/Expert/topic/4290/4290025.xml?temp=.2094538
ccccffff兄弟,上面的回复说代码超过一行就不行是什么问题啊?
<html>
<head><META http-equiv=\"Content-Type\" content=\"text/html; charset=shift_jis\">
<title>Test</title>
<script language=javascript>
var http_request = false;
var strData;function set()
{
sel = document.selection.createRange().text;
getData();
document.getElementById("textAr").innerText=strData ;
var rng = document.getElementById("textAr").createTextRange();
if( sel != "" ){
if(rng.findText(sel))
rng.select();
}
}function getData(){
//strData = window.document.TestApplet.GetStringData();
strData = "123456789023423523544444444444444444444444444444444444444444444444444444444444444444444123456789023423523544444444444444444444444444444444444444444444444444444444444444444444123456789023423523544444444444444444444444444444444444444444444444444444444444444444444123456789023423523544444444444444444444444444444444444444444444444444444444444444444444123456789023423523544444444444444444444444444444444444444444444444444444444444444444444123456789023423523544444444444444444444444444444444444444444444444444444444444444444444123456789023423523544444444444444444444444444444444444444444444444444444444444444444444123456789023423523544444444444444444444444444444444444444444444444444444444444444444444123456789023423523544444444444444444444444444444444444444444444444444444444444444444444";
//strData="dgdfgdfgdfgdfg"
}
</script>
</head>
<body>
<form method = "post" action = "" name = "Fm">
<input type = "button" value = "更新" onclick = "set()">
<textarea name = "textAr" rows = 10 cols = 140>12345
</textarea><input type = hidden name = "btnH">
</form>
</body>
</html>
{
r1 = document.selection.createRange();
ss = r1.text;
r = r1.getClientRects();
getData();
document.getElementById("textAr").innerText=strData ;
if( ss != "" )
{
var rng = document.getElementById("textAr").createTextRange();
var rng2= rng.duplicate();
rng.moveToPoint(r[0].left,r[0].top);
rng.select();
rng2.setEndPoint("StartToEnd", rng);
rng.moveToPoint(r[r.length-1].right,r[r.length-1].top);
rng2.setEndPoint("EndToEnd", rng);
rng2.select();
}
}
<html>
<head><META http-equiv=\"Content-Type\" content=\"text/html; charset=shift_jis\">
<title>Test</title>
<script language=javascript>
var strData;
function set()
{
var obj=document.getElementById("textAr")
document.selection.createRange().text=document.selection.createRange().text+"###"
var s = obj.value.indexOf(document.selection.createRange().text);
var n = document.selection.createRange().text.length-3;
sel = document.selection.createRange().text;
getData();
obj.innerText=strData ;
obj.value=obj.value.replace(/###/,"")
var r = document.getElementById("textAr").createTextRange();
r.collapse(false);
r.moveStart("character", -obj.value.length+s);
r.moveEnd("character", -obj.value.length+n+s);
r.select();
}
function getData(){
//strData = window.document.TestApplet.GetStringData();
strData = "123456789023423523544444444444444444444444444444444444444444444444444444444444444444444123456789023423523544444444444444444444444444444444444444444444444444444444444444444444123456789023423523544444444444444444444444444444444444444444444444444444444444444444444123456789023423523544444444444444444444444444444444444444444444444444444444444444444444123456789023423523544444444444444444444444444444444444444444444444444444444444444444444123456789023423523544444444444444444444444444444444444444444444444444444444444444444444123456789023423523544444444444444444444444444444444444444444444444444444444444444444444123456789023423523544444444444444444444444444444444444444444444444444444444444444444444123456789023423523544444444444444444444444444444444444444444444444444444444444444444444";
//strData="dgdfgdfgdfgdfg"
}</script>
</head>
<body>
<form method = "post" action = "" name = "Fm">
<input type = "button" value = "更新" onclick = "set()">
<textarea name = "textAr" rows = 10 cols = 140 >12345
</textarea><input type = hidden name = "btnH">
</form>
</body>
</html>
稻草人实现的,好像没你这么麻烦。。
他用的这个 getClientRects方法
我也在查。。
对了,天外兄你有什么好一点的书推荐么?
javascript的
如果一开始选者3-10行,然后按动textarea的滚动条,下拉3行,然后再按更新,那么就会发现,1-2行也别选中了。<html>
<head><META http-equiv=\"Content-Type\" content=\"text/html; charset=shift_jis\">
<title>Test</title>
<script language=javascript>
var http_request = false;
var strData;function set()
{
r1 = document.selection.createRange();
ss = r1.text;
r = r1.getClientRects();
getData();
document.getElementById("textAr").innerText=strData ;
if( ss != "" )
{
var rng = document.getElementById("textAr").createTextRange();
var rng2= rng.duplicate();
rng.moveToPoint(r[0].left,r[0].top);
rng.select();
rng2.setEndPoint("StartToEnd", rng);
rng.moveToPoint(r[r.length-1].right,r[r.length-1].top);
rng2.setEndPoint("EndToEnd", rng);
rng2.select();
}}
function getData(){
//strData = window.document.TestApplet.GetStringData();
strData = "123456789023423523544444444444444444444444444444444444444444444444435444444444444444412345678902342352354444444444444444444444444444444444444444444444444444444444444444444412345678902342352354444444444444444678444444444444444444444444444444444444444444444444441234567890234235235444444444444444444444444444444444444444444444444444444444444444444441234567890234235235444444444444444444444444444444444444444444444444444444444444444444441234567890234235235444444444444444444444444444444444444444467844444444444444444412345678902342352354444444444444444444444444444444444444444444444444444444444444444444412345678902342352354444444444444444444478544444444444444444444444444444444444123456789023423523544444444444444444444444444444444444444444444444444444444444444444444";
}
</script>
</head>
<body>
<form method = "post" action = "" name = "Fm">
<input type = "button" value = "更新" onclick = "set()">
<textarea name = "textAr" rows = 10 cols = 10>123456
</textarea><input type = hidden name = "btnH">
</form>
</body>
</html>
1:画面上会多出"###"这三个字符
2:循环读取的时候,选中的结果就没了。。代码如下:<html>
<head><META http-equiv=\"Content-Type\" content=\"text/html; charset=shift_jis\">
<title>Test</title>
<script language=javascript>
var http_request = false;
var strData;
function set()
{
var obj=document.getElementById("textAr")
document.selection.createRange().text=document.selection.createRange().text + "###";
var s = obj.value.indexOf(document.selection.createRange().text);
var n = document.selection.createRange().text.length-3;
sel = document.selection.createRange().text;
getData();
obj.innerText=strData ;
obj.value=obj.value.replace(/###/,"")
var r = document.getElementById("textAr").createTextRange();
r.collapse(false);
r.moveStart("character", -obj.value.length+s);
r.moveEnd("character", -obj.value.length+n+s);
r.select();
}var the_timeout = setTimeout("fresh();",2000);
function fresh() {
set();
the_timeout = setTimeout("fresh();",2000)
}function getData(){
//strData = window.document.TestApplet.GetStringData();
strData = "123456789023423523544444444444444444444444444444444444444444444444435444444444444444412345678902342352354444444444444444444444444444444444444444444444444444444444444444444412345678902342352354444444444444444678444444444444444444444444444444444444444444444444441234567890234235235444444444444444444444444444444444444444444444444444444444444444444441234567890234235235444444444444444444444444444444444444444444444444444444444444444444441234567890234235235444444444444444444444444444444444444444467844444444444444444412345678902342352354444444444444444444444444444444444444444444444444444444444444444444412345678902342352354444444444444444444478544444444444444444444444444444444444123456789023423523544444444444444444444444444444444444444444444444444444444444444444444";
}
</script>
</head>
<body>
<form method = "post" action = "" name = "Fm">
<input type = "button" value = "更新" onclick = "set()">
<textarea name = "textAr" rows = 10 cols = 10>123456
</textarea><input type = hidden name = "btnH">
</form>
</body>
</html>
你看看还有没有问题?
<html>
<head><META http-equiv=\"Content-Type\" content=\"text/html; charset=shift_jis\">
<title>Test</title>
<script language=javascript>
var strData;
flag=false function set()
{
var obj=document.getElementById("textAr")
if(document.selection.createRange().text!="")
{
if(arguments[0]!=1)
{
document.selection.createRange().text=document.selection.createRange().text + "###";
}
else
{
if(document.selection.createRange().text!=r.text)
{
flag=true;//查看是否重新选择
document.selection.createRange().text=document.selection.createRange().text + "###";
}
}
}
if(arguments[0]!=1)
{
sel = document.selection.createRange().text;
s = obj.value.indexOf(document.selection.createRange().text);
n = document.selection.createRange().text.length-3;
}
else
{
if(flag)
{
sel = document.selection.createRange().text;
s = obj.value.indexOf(document.selection.createRange().text);
n = document.selection.createRange().text.length-3;
flag=false;
}
else
{
sel=r.text+"###"
r.text=r.text+"###"
s = obj.value.indexOf(sel);
n = sel.length-3;
}
}
getData();
obj.innerText=strData ;
obj.value=obj.value.replace(/###/,"")
r = document.getElementById("textAr").createTextRange();
r.collapse(false);
r.moveStart("character", -obj.value.length+s);
r.moveEnd("character", -obj.value.length+n+s);
r.scrollIntoView()
r.select();
setTimeout("set(1);",2000);
}setTimeout("set();",2000);function getData(){
//strData = window.document.TestApplet.GetStringData();
strData = "123456789023423523544444444444444444444444444444444444444444444444435444444444444444412345678902342352354444444444444444444444444444444444444444444444444444444444444444444412345678902342352354444444444444444678444444444444444444444444444444444444444444444444441234567890234235235444444444444444444444444444444444444444444444444444444444444444444441234567890234235235444444444444444444444444444444444444444444444444444444444444444444441234567890234235235444444444444444444444444444444444444444467844444444444444444412345678902342352354444444444444444444444444444444444444444444444444444444444444444444412345678902342352354444444444444444444478544444444444444444444444444444444444123456789023423523544444444444444444444444444444444444444444444444444444444444444444444";
}
</script>
</head>
<body>
<form method = "post" action = "" name = "Fm">
<input type = "button" value = "更新" onclick = "set()">
<textarea name = "textAr" rows = 10 cols = 10>123456
</textarea><input type = hidden name = "btnH">
</form>
</body>
</html>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<SCRIPT LANGUAGE="JavaScript">
var staus ;
var oRange;
var objTimer;
var objTimer1;
var objTimer2;
var sBookMark;
<!--
function fnSearch() {
fm1.txtarea1.focus();
oRange = fm1.txtarea1.createTextRange();
searchtxt(1);
}function searchtxt(n){
var v1;
var v2;
var txtr;
var blnS; window.clearInterval(objTimer1);
window.clearInterval(objTimer2); v1 = fm1.txtarea1.value;
v2 = fm1.txtarea2.value;
v3 = fm1.txtarea3.value; if( n == 1) {
if (oRange != null) {
oRange.findText(v2);
if (oRange.findText(v2) == true){
//sBookMark = oRange.getBook();
oRange.select();
oRange.scrollIntoView();
objTimer2 = window.setInterval("searchtxt(2)",1000);
}
else{
objTimer = window.setInterval("searchtxt(3)",1000);
}
}
staus = 2 ;
}
else if(n==2) {
oRange.text = v3;
staus = 1;
objTimer1 = window.setInterval("searchtxt(1)",1000);
}
else if(n==3) {
staus = 3 ;
window.clearInterval(objTimer);
window.clearInterval(objTimer1);
window.clearInterval(objTimer2);
}
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<FORM METHOD=POST name="fm1">
<TEXTAREA NAME="txtarea1" ROWS="20" COLS="50">
this is the original text, and this is the string will be repalced.
this is the original text, and this is the string will be repalced.
this is the original text, and this is the string will be repalced.
this is the original text, and this is the string will be repalced.
this is the original text, and this is the string will be repalced.
this is the original text, and this is the string will be repalced.
</TEXTAREA>
<TEXTAREA NAME="txtarea2" ROWS="20" COLS="50"> will be </TEXTAREA>
<TEXTAREA NAME="txtarea3" ROWS="20" COLS="50"> has been </TEXTAREA>
<input type="button" value="search" onclick="fnSearch()">
</FORM></BODY>
</HTML>