两个JavaScript代码有问题

时间:2010-07-03 11:43:58

标签: javascript jquery

我有这两个代码 -

new function($) {
$.fn.getCursorPosition = function() {
var pos = 0;
var el = $(this).get(0);
// IE Support
if (document.selection) {
    el.focus();
    var Sel = document.selection.createRange();
    var SelLength = document.selection.createRange().text.length;
    Sel.moveStart('character', -el.value.length);
    pos = Sel.text.length - SelLength;
}
// Firefox support
else if (el.selectionStart || el.selectionStart == '0')
    pos = el.selectionStart;

return pos;
}
} (jQuery);

var element = document.getElementById('txtarr');
if( document.selection ){
      // The current selection
    var range = document.selection.createRange();
      // We'll use this as a 'dummy'
    var stored_range = range.duplicate();
      // Select all text
    stored_range.moveToElementText( element );
      // Now move 'dummy' end point to end point of original range
    stored_range.setEndPoint( 'EndToEnd', range );
      // Now we can calculate start and end points
    element.selectionStart = stored_range.text.length - range.text.length;
    element.selectionEnd = element.selectionStart + range.text.length;
}

第一个用于获取文本区域中的光标位置,第二个用于确定textarea的结尾,但它们给出相同的结果? 哪里出错了?

2 个答案:

答案 0 :(得分:1)

两段代码都以略微不同的方式做同样的事情。每个人都试图在textarea(或文本输入)中获取插入符号或选择的位置,尽管第一个只获得选择的开始位置,而第二个获得开始和结束位置。

两者都有不明确的推论:第一个假定使用document.selection的浏览器将支持TextRange,而第二个假设相同的推理加上另一个假设不支持document.selection的浏览器将具有支持textareas的selectionStartselectionEnd属性。也不会正确处理IE中的换行符。对于执行此操作的代码,请参阅我的答案:How to get the start and end points of selection in text area?

答案 1 :(得分:0)

我修好了。这很简单:)。 我只需用$("#txtarr").val().length(jQuery)替换第二个代码(用于确定textarea的结尾)。#txtarr是我的textarea的id。