[英]Find value of current line of a <textarea> using javascript
如何找到文本區域當前行的值?
我知道我必須找到插入符號的位置,然后找到它之前的所有內容直到最后一個 \\n 以及它之后的所有內容到下一個 \\n。
我怎樣才能做到這一點?
一個簡單的方法就是循環:
var caretPos = 53, // however you get it
start, end
;
for (start = caretPos; start >= 0 && myString[start] != "\n"; --start);
for (end = caretPos; end < myString.length && myString[end] != "\n"; ++end);
var line = myString.substring(start + 1, end - 1);
根據nickf的回答,以下示例(使用jQuery)可能會更快一些,因為它使用(lastI|i)ndexOf
:
function current_line(textarea) {
var $ta = $(textarea),
pos = $ta.getSelection().start, // fieldselection jQuery plugin
taval = $ta.val(),
start = taval.lastIndexOf('\n', pos - 1) + 1,
end = taval.indexOf('\n', pos);
if (end == -1) {
end = taval.length;
}
return taval.substr(start, end - start);
}
這是jFiddle 。
單線怎么樣:)
// after getting a textarea into el
sLine = el.value.substring(el.value.lastIndexOf('\n', el.selectionStart) + 1, ((end = el.value.indexOf('\n', el.selectionStart) - 1) => end > -1 ? end : undefined)());
這是有效的,因為當 end 未定義時substring
給出了 start 之后的所有內容。
Start works nicely because lastIndexOf
returns -1
when selection is on the first line and \\n is not found. 因為我們已經為找到的結果添加了 1,這使我們得到了 0。
結局比較棘手。 要在未找到 \\n 時獲得未定義以便返回字符串的其余部分,可以使用自執行 ( IIEF ) 箭頭函數。
哇,邊緣情況! 如果 lastIndexOf 因某種原因而失敗,它將 - 1 的開頭視為零,因此如果第一行是空行,則上述和該問題的其他答案將第一行作為 '\\n' 而不是空字符串。 要處理該邊緣:
// after getting a textarea into el
sline = el.value.substring(((el.selectionStart > 0) ? (el.value.lastIndexOf('\n', el.selectionStart - 1) + 1) : 0), ((end = el.value.indexOf('\n', el.selectionStart)) => (end > -1) ? end- 1 : undefined)());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.