日期:2014-05-16  浏览次数:20545 次

createTextRange问题.
JS:
    <script   language= "javascript ">
    function   ss()
    {
        var   mom_value     =     document.getElementById( 'v_name ');
        var   tt0_value       =     mom_value.createTextRange();
       
        var   tt1_value       =     mom_value.createTextRange();
var   tt2_value       =     mom_value.createTextRange();

        var   re       =     tt0_value.getClientRects();
        var   t                     =     re.length;
        for(var   i=0;i <t;i++)
        {
            tt2_value.moveToPoint(re[i].left,re[i].top);
            tt1_value.setEndPoint( "StartToStart ",   tt2_value);  
            tt2_value.moveToPoint(re[i].left,re[i].bottom);  
            tt1_value.setEndPoint( "EndToEnd ",   tt2_value);
            alert(tt1_value.text)
        }
    }
</script>
body
    <textarea   style= "WIDTH:300px "   name= "v_name "   rows= "10 "   cols= "60 "> </textarea>   <input   type= "button "   onclick= "ss() "   value= "点点 ">

如果输入N行,只会   alter出N-1行的值,为什么取不到最后一行的值?求高人解答,在线等。

------解决方案--------------------
for(var i=0;i <t+1;i++)

这样能全显示么?

------解决方案--------------------
问题很显然,用不着去试这试那
最后一行显示不出来,肯定与换行符有关
tt2_value.moveToPoint(re[i].left,re[i].top);//当前行的起始位置
tt1_value.setEndPoint( "StartToStart ", tt2_value);
tt2_value.moveToPoint(re[i].left,re[i].bottom);//下一行的起始位置
tt1_value.setEndPoint( "EndToEnd ", tt2_value);
alert(tt1_value.text)
这样,如果不在最后一行,拿到的数据是没有问题的
但如果是最后一行
tt2_value.moveToPoint(re[i].left,re[i].bottom);//下一行的起始位置
由于没有下一行,所以得到的仍然是 "当前行的起始位置 "
自然拿到的数据为空

解决方法:

tt2_value.moveToPoint(re[i].left,re[i].bottom);//下一行的起始位置
换成
tt2_value.moveToPoint(re[i].right,re[i].top);//当前行的结束位置
------解决方案--------------------
楼上正解。