在textarea中以像素为单位查找插入位置

时间:2012-01-26 01:15:51

标签: javascript html cursor textarea position

我想知道是否有可能在整个页面中找到textarea中的carret的确切位置(以像素为单位)。例如,如果我在文本框中键入This is text,我想知道从屏幕左上角到carot的像素。

它将采用X:200 Y:100的形式。这样我就可以定位浮动div。这需要在 javascript 中动态完成。

谢谢你们

4 个答案:

答案 0 :(得分:2)

这个“原始代码”至少在IE中起作用。

使用该代码,您可以将<TEXTAREA>放在页面中的任意位置,<DIV id="db">将跟随它。即使页面的滚动位置。您可以通过更改<DIV> - 语句处的字面数来确定d.style...6的位置。

<body>
<div id="db" style="position:absolute;left:-20px;top:-20px;border:1px solid red;">V</div>
<br><br><br>
<form id="props">
<textarea id="ta" style="width:200px;height:100px;" onkeyup="moveDiv();"></textarea>
</form>

<script>
<!--
var b=document.body;
var d=document.getElementById('db');
var a=document.getElementById('ta');

function moveDiv(){
    var sel=document.selection;
    var targ=sel.createRange();
    d.style.top=a.offsetTop+a.clientTop-d.clientHeight-6;
    d.style.left=targ.offsetLeft+b.scrollLeft-6;
    return;
}
// -->
</script>
</body>

<DIV>的定位不太准确,但在<TEXTAREA>中使用固定宽度字体时效果会更好。

答案 1 :(得分:1)

有一个实现:https://github.com/beviz/jquery-caret-position-getter,它可以在 jtextarea (iex,y)中获得插入位置

答案 2 :(得分:0)

这是一个插件:jQuery caret plugin

答案 3 :(得分:0)

以下是来自Caret position in pixels in an input type text (not a textarea)Caret position in textarea, in characters from the startdocument.getElementById vs jQuery $()的各种想法的简单组合,以获取{jQuery中<input>元素的插入位置。它在内部单击时有效,但在使用箭头或键入移动插入符号时不起作用。

<input id="someid">
<span id="faux" style="display:none"></span><br/>

<script>
var inputter = $('#someid')[0];
var faux = $('#faux');

function getCaret(el) { 
    if (el.selectionStart) { 
        return el.selectionStart; 
    } else if (document.selection) { 
        el.focus(); 

        var r = document.selection.createRange(); 
        if (r == null) { 
            return 0; 
        } 

        var re = el.createTextRange(), 
            rc = re.duplicate(); 
        re.moveToBookmark(r.getBookmark()); 
        rc.setEndPoint('EndToStart', re); 

        return rc.text.length; 
    }  
    return 0; 
}

$("#someid").click( function( event ) {
    caretpos = getCaret(inputter);
    calcfaux = faux.text($(this).val().substring(0, caretpos));
    fauxpos = calcfaux.outerWidth();
    $("#getpx").text(fauxpos + " px");
});

</script>

我们使用var inputter = document.getElementById('someid')

代替var inputter = $('#someid')[0];

这是 FIDDLE