`
liujinmarshall
  • 浏览: 118761 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

javascript获取textarea光标选择位置和内容方法(IE, Firefox)

阅读更多
   在网上用baidu找了很久,找到的都是IE的方法,Firefox都不能用。 而且很多要用到<textarea>.focus()方法,用起来很不方便。
  后来转用Google,搜了下"textarea cursor",第一个就有好方法。我根据最后一个家伙的comments,写了一个sample,应该还是挺好用的。
原文地址:http://weblogs.asp.net/skillet/archive/2005/03/24/395838.aspx

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

相关推荐

    在textarea光标处插入文本

    该方法适用于多种浏览器环境,包括Internet Explorer(IE)和其他基于Mozilla的浏览器(如Firefox)。我们将通过分析提供的代码示例来深入理解其实现原理。 #### 一、实现原理 ##### 1. 兼容性处理 由于不同的...

    javascript获得光标所在的文本框(text/textarea)中的位置

    在非IE浏览器中,如Firefox、Chrome等,我们可以使用`selectionStart`属性来获取光标的位置。`selectionStart`返回的是光标在文本框中开始选择的字符索引,如果未进行任何选择,那么它就代表了光标所在的位置。 在...

    获取div编辑框,textarea,input text的光标位置 兼容IE,FF和Chrome的方法介绍

    本文将介绍如何在IE、Firefox和Chrome中获取div编辑框、textarea和input text光标位置的方法,并提供相应的代码示例。 首先,了解不同浏览器对于光标位置获取的支持情况是必要的。例如,IE浏览器使用了document....

    javascript textarea光标定位方法(兼容IE和FF)

    在本文中,我们将探讨如何在 textarea 元素中实现光标定位,同时确保兼容 Internet Explorer(IE)和 Firefox(FF)这两种主要的浏览器。 在 textarea 中设置光标位置是一个常见的需求,特别是在用户交互场景中,如...

    获取和设置输入框光标位置的插件

    5. **兼容性**:良好的插件会确保其在各种浏览器(包括主流的Chrome、Firefox、Safari、Edge以及旧版本的IE)中都能正常工作。 6. **事件监听**:插件可能还提供监听光标位置变化的事件,帮助开发者在光标移动时...

    JS在TextArea光标位置插入文字并实现移动光标到文字末尾

    `selectionStart`和`selectionEnd`是现代浏览器(Firefox,Chrome,Safari,Opera)中`&lt;textarea&gt;`和`&lt;input&gt;`元素所支持的属性,它们分别表示选区的起始位置和结束位置。这两个属性可以帮助我们获取或设置用户在...

    光标定位方法

    获取光标位置通常有两种方式:一种是针对IE浏览器的支持,另一种则是对Firefox和其他现代浏览器的支持。 ##### IE支持 对于Internet Explorer(IE)浏览器,可以通过`document.selection`对象来获取光标的位置: ...

    javascript获取以及设置光标位置

    如果不支持,那么将检查是否支持textDom.selectionStart,这是非IE浏览器(如Firefox)支持的方式来获取光标位置。 获取光标位置的函数核心在于检测当前浏览器支持哪种方式,并根据不同的浏览器实现不同的逻辑。在...

    JavaScript 获取/设置光标位置,兼容Input&amp;&amp;TextArea

    本文将深入探讨如何用JavaScript获取和设置Input和TextArea元素中的光标位置,并提供兼容性处理的方法。 在获取Input或TextArea元素光标位置时,我们需要区分对待IE浏览器和其他现代浏览器。IE浏览器通过document....

    JS在textarea光标处插入文本的小例子

    标题“JS在textarea光标处插入文本的小例子”和描述“本实例使用Javascript实现在textarea光标处插入文本,支持多种浏览器”揭示了该文档是关于如何使用JavaScript在网页文本区域(textarea)组件光标所在位置插入...

    js操作textarea方法集合封装(兼容IE,firefox)

    首先,操作textarea涉及获取和设置光标位置,插入字符串以及选择特定字符等操作。传统上,由于不同浏览器可能使用不同的API来处理这些功能,因此实现一个跨浏览器兼容的方法集变得具有挑战性。 下面将详细解释几个...

    通过javascript在光标处插入文本

    Firefox、Chrome等现代浏览器支持`selectionStart`和`selectionEnd`属性,可以直接获取光标位置。而IE浏览器则需要使用`document.selection`对象来获取光标位置。 在我们的示例代码中,我们使用了以下代码来获取...

    Javascript实现获取及设置光标位置的方法

    如果元素是`input`或`textarea`,在Firefox中可以通过检查`selectionStart`属性来确定光标位置。这个属性表示选中文本的起始位置,如果当前没有选中文本,则表示光标位置。 接下来,我们来看看设置光标位置的函数`...

    js操作textarea 常用方法总结

    本文将总结一些常用的JavaScript操作textarea的方法,这些方法可以在各种主流浏览器中使用,并通过实际测试验证了兼容性,包括IE6、IE8、Firefox、Chrome、Opera和Safari。 首先,需要了解textarea元素在DOM中的...

    将光标定位到textarea的某一行的javascript代码

    对于其他非IE浏览器,如Firefox、Chrome等,可以使用`setSelectionRange()`或`selectionStart`和`selectionEnd`属性来实现相同的功能。不过,这些方法在跨浏览器兼容性上会有所不同,所以在实际开发中,可能需要使用...

    js获取光标位置和设置文本框光标位置示例代码

    在不同的浏览器中,处理光标位置的方法有所不同,主要分为IE浏览器和其他非IE浏览器(如Chrome、Firefox)。 1. **获取光标位置** 对于非IE浏览器,如Chrome和Firefox,可以使用`selectionStart`属性来获取光标...

    jQuery实现在textarea指定位置插入字符或表情的方法

    - 对于现代浏览器(如Firefox、Chrome等)支持的`selectionStart`和`selectionEnd`属性,我们需要获取当前的起始和结束选择位置,然后插入`myValue`到选定的位置。同时,我们还需要保存和恢复textarea的滚动位置,...

Global site tag (gtag.js) - Google Analytics