簡體   English   中英

查找當前行的值<textarea>使用 javascript

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM