2012-09-23 60 views
23

可能重复:
Find out the 'line' (row) number of the cursor in a textarea获取行号在文本区域

我想找出的行号,一个用户的光标在一个HTML元素textarea

这是可能使用JavaScript和jQuery?

+1

定义在一个文本行。它包含包装文本还是只想考虑换行符? – zeebonk

+0

我想在一行中设置15个字符限制,并且用户不应该能够在5行中输入超过75个字符 – Freelancer

+0

尼斯问题真的:)喜欢和书签;) – Marwan

回答

20

这适用于按钮单击。从Find out the 'line' (row) number of the cursor in a textarea

​function getline() 
{ 
    var t = $("#t")[0]; 
    alert(t.value.substr(0, t.selectionStart).split("\n").length); 
}​ 

HTML被盗

​<textarea rows="6" id="t"> 
there is no 
love in the ghetto 
so come here 
and get it 
</textarea> 
<input type="button" onclick="getline()" value="get line" />​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 
+3

这不包含由换行引起的换行符。 –

+4

@RobW:我不认为OP需要那 – Bergi

+0

它对我有效...它的帮助 – Freelancer

1

您可以用下面的办法

  1. Find the caret positio N(指数)。
  2. 搜索由位置0的子索引
  3. 搜索的步骤中获得的子串中的新线路号2.

//测试

$(function() { 
    $('#test').keyup(function() { 
     var pos = 0; 
     if (this.selectionStart) { 
      pos = this.selectionStart; 
     } else if (document.selection) { 
      this.focus(); 

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

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

       pos = rc.text.length; 
      } 
     } 
     $('#c').html(this.value.substr(0, pos).split("\n").length); 
    }); 
}); 
​ 

这里是一个工作示例 http://jsfiddle.net/S2yn3/1/

+0

由换行符引起的线条怎么样? –

+0

你是不是指wordwrap? –

+0

是,造成自动换行换行... –

1

这可以分为三个步骤:

我想你不想考虑包装文本和滚动的内容。假设您使用的功能从this answer,它会是这样的:

var el = document.getElementById("inputarea"); // or something 

var pos = getCaret(el), 
    before = el.value.substr(0, pos), 
    lines = before.split(/\r?\n/); 
return lines.length;