多余的话不说,直接上代码(直接拷贝下面所有代码,即可得到textarea中光标的所有行)
function getRows(id){
var startFocus = document.getElementById(id).selectionStart;var endFocus = document.getElementById(id).selectionEnd;
var tags=document.getElementById(id).value;
var sp="\n"; / /如果不对,可以把此处换成\r\n
var rows = [];
var startRow=getStartRow(startFocus,tags,sp);
var endRow=getEndRow(endFocus,tags,sp);
//开始和结束在一行
if(startEnd(startFocus,endFocus,tags,sp)){
// rows.push(startRow);
}else{
//开始点是否在结尾处
if(startIsEnd(startFocus,tags,sp)){
startRow=startRow+1;
//结尾是否在下一行的开始处
}if(endIsStart(endFocus,tags,sp)){
endRow=endRow-1;
}
}
for ( var i = startRow; i <= endRow; i++) {
rows.push(i);
}
return rows;
}
//开始和结束是否在一行
function startEnd(startFocus,endFocus,tags,sp)
{
b=false;
if(startFocus==endFocus){
b= true;
}else if(getStartRow(startFocus,tags,sp)==getEndRow(endFocus,tags,sp)){
b= true;
}
return b;
}
//开始焦点是否在结束位置
function startIsEnd(startFocus,tags,sp)
{
var f=[];
f=tags.split(sp);
var len=0;
var row=0;
var b=false;
for ( var i = 0; i < f.length; i++) {
if(i!=0){
len+=1;
}
len=len+f[i].length;
if(startFocus==len){
b=true;
break;
}
}
return b;
}
//结束焦点是否在下一行开始处位置
function endIsStart(endFocus,tags,sp)
{
var str=[]; str=tags.split(sp);
var len=0; var aa=0; var endRow=0;
var b=false;
for ( var i = 0; i < str.length; i++) {
if(i!=0){
len+=1;
}
aa=len;
len=len+str[i].length;
if(endFocus==len+1){
b=true;
break;;
}
}
return b;
}
//startRow
function getStartRow(startFocus,tags,sp)
{
var f=[]; f=tags.split(sp);
var len=0;
var aa=0;
var startRow=0;
for ( var i = 0; i < f.length; i++) {
if(i!=0){
len+=1;
}
aa=len;
len=len+f[i].length;
if(aa<=startFocus&&startFocus<=len){
startRow=i;
break;
}
}
return startRow;
}
//engRow
function getEndRow(endFocus,tags,sp)
{
var str=[]; str=tags.split(sp);
var len=0;
var aa=0;
var endRow=0;
for ( var i = 0; i < str.length; i++) {
if(i!=0){
len+=1;
}
aa=len;
len=len+str[i].length;
if(aa<=endFocus&&endFocus<=len){
endRow=i;
break;
}
}
return endRow;
}