2012-09-23 22 views
23

Mögliche Duplizieren:
Find out the 'line' (row) number of the cursor in a textareaErste Zeilennummer im Textbereich

Ich mag die Zeilennummer, um herauszufinden, dass ein Cursor des Benutzers in auf in einem HTML textarea Elemente.

Ist dies mit Javascript und jquery möglich?

+1

definieren Zeilen in einem Textfeld. Enthält es umschlossenen Text oder möchten Sie nur Zeilenumbrüche berücksichtigen? – zeebonk

+0

Ich möchte 15 Zeichen Grenze in einer Zeile setzen und Benutzer sollte nicht mehr als 75 Zeichen in 5 Zeilen eingeben können – Freelancer

+0

nette Frage wirklich :) Like und Bookmark;) – Marwan

Antwort

20

Diese mit Button-Klick funktioniert. Bestohlen 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

Dies berücksichtigt keine Zeilenumbrüche, die durch das Umbrechen von Wörtern verursacht werden. –

+4

@RobW: Ich glaube nicht, dass das OP das braucht – Bergi

+0

Es hat für mich funktioniert ... Es ist hilfreich – Freelancer

1

können Sie den folgenden Ansatz

  1. Find the caret positio n (Index) verwenden.
  2. finden den Teil von Position 0 auf Index
  3. Suche nach Anzahl der neuen Zeilen in der Teilkette in Schritt 2.

// Test-

$(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); 
    }); 
}); 
​ 

Hier ist ein funktionierendes Beispiel http://jsfiddle.net/S2yn3/1/

+0

Was ist mit Linien durch Zeilenumbrüche verursacht? –

+0

Meinst du wordwrap? –

+0

Ja, Zeilenumbrüche aufgrund von Wordwrapping ... –

1

Dies kann in drei Schritte aufgeteilt werden:

Ich denke, Sie möchten nicht umschlossenen Text und gescrollt Inhalt betrachten. Vorausgesetzt, dass Sie die Funktion von this answer verwenden, wäre es wie:

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;