重複の可能性:
テキスト領域のカーソルの「行」(行)番号を調べます
HTML textarea
要素でユーザーのカーソルが置かれている行番号を調べたい。
これはjavascriptとjqueryを使用して可能ですか?
これはボタンクリックで機能します。盗まれた テキスト領域のカーソルの「行」(行)番号を調べます
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" />
次のアプローチを使用できます
//テスト
$(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/
これは、次の3つのステップに分けることができます。
ラップされたテキストやスクロールされたコンテンツは考慮したくないと思います。 この回答 の関数を使用するとすると、次のようになります。
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;