<textarea   id="txt1"   style="width:150;height:300">   
  11111111   
  22222222   
  33333333   
  44444444   
  55555555   
  66666666   
  77777777   
  88888888   
  </textarea>     
  <input   type="button"   value="DelRow"   onclick="DelRow()"><br>     
  <script>     
      
  function   DelRow()     
  {     
  //先把Textarea的数据分开.按\r\n,就是回车符分开.存成数组.   
  var   str   =   txt1.value;   
  arrstr   =   str.split(/\r\n/);   
  for(var   i=0;i<arrstr.length;i++)   
  {   
          arrstr[i]=arrstr[i].concat("\r")   
  }   
  //alert(arrstr)   
  /******   Start     取得当标所在的位置pos       Start********/   
  txt1.focus();     
  var   currentRange=document.selection.createRange();     
  var   workRange=currentRange.duplicate();     
  txt1.select();     
  var   allRange=document.selection.createRange();     
  var   pos=0;     
  while(workRange.compareEndPoints("StartToStart",allRange)>0)     
  {     
      workRange.moveStart("character",-1);     
      pos++;     
  }       
  currentRange.select();     
  /******       End     取得当标所在的位置pos       End**********/   
  //位置和每行的字符长度相减.当小于零时.取得i的值.也就是对应的数组下标.   
  for(var   j=0;j<arrstr.length;j++)   
  {   
          pos-=arrstr[j].length;   
  if(pos<0){arrstr.baoremove(j);break;}   
  }   
  //合并数组.并显示.       
  txt1.value=arrstr.join("")       
  }     
  //删除数组元素.原数组上操作.   
  Array.prototype.baoremove   =   function(dx)   
  {   
          if(isNaN(dx)||dx>this.length){return   false;}   
          this.splice(dx,1);   
  }   
  </script>

解决方案 »

  1.   

    不知道是不是lz说的意思:(IE测试通过)
    <html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>new page</title>
    <script>
    function doit(){
         var rng = event.srcElement.createTextRange(); 
         rng.moveToPoint(event.x,event.y); 
         rng.moveEnd("character",event.srcElement.value.length);
         var xy=event.srcElement.value.length - rng.text.length;
         var str=t1.innerText;
         if(str.substring(xy-2,xy)=="\r\n"){
          xy=xy-2;
         }
         var end=str.indexOf("\r\n",xy);
         if(end<0){
          end=str.length;
         }
         var start=str.substring(0,xy).lastIndexOf("\r\n");
         if(start<0){
          start=0;
         }else{
          start=start+2;
         }
         div1.innerText="该行的文字为:"+str.substring(start,end);
    }
    function a(){
        t1.innerText="aaaaaaaaaaaaaaaaaaaaaa\r\nbbbbbbbbbbbbbbbbbbbbbbbb\r\ncccccccccccccccccccccc";
    }
    </script>
    </head><body onload=a()>
    <textarea id=t1 onclick="doit()" rows="5" cols="20"></textarea>
    <div id=div1></div>
    </body></html>
      

  2.   

    楼上的有bug,如果光标在行的末尾的话,不是显示当前行,而是显示下一行的文字,另如果有空格在空格附件获取的文字有问题。
      

  3.   

    把鼠标点到行的最后一个字符前(如abc,光标在bc中间位置),可能导致获取的字符串为当前行下一行全部的内容。

    123123123 456
    6666666666666666
    8788888888888888
    鼠标点在第一行5,6中间,会显示第一行和第二行的内容。
      

  4.   

    to blackpark(暖咖啡):
    点5,6中间结果是: “123123123 456   6666666666666666”吗?
    请确认123123123 456和6666666666666666之间有没有\r\n
    如果有则作为2行处理,如果没有,则作为一行
    确认方法:
    取到textarea的innerText
    var str=document.getElementById("t1").innerText;
    var firstRow=str.split("\r\n")[0];
    alert(firstRow);//若结果与这里相同,证明我的代码是对的