LINUX.ORG.RU

Добавить текст к каждой строке в рамках выделения

 


0

1

Есть textarea. Пользователь выделяет в ней некий многострочный текст. Нужно добавить определенный текст к началу каждой из выделенных строк (даже если строка выделена частично). Допускается использование jQuery.

★★★★★

Ответ на: комментарий от Bad_ptr

Я б замутил на нейронных сетях за 9000 баксов.

anonymous
()

Разделом ошибся.

anonymous
()
Ответ на: комментарий от Bad_ptr

За готовый пуллреквест отдам последние 0.015 BTC

vurdalak ★★★★★
() автор топика

а что есть строка?
по \n деленная, или которая динамически формируется в зависимостри от размера текстареа?
или там ползунки появляются?

ii343hbka ★★★
()
Последнее исправление: ii343hbka (всего исправлений: 1)
Ответ на: комментарий от ii343hbka

По \n. Проблема в том, что я не знаю, как достать начало строки, которая частично выделена. Ну и вообще не очень понимаю, как выделение разбить и добавить к нему текст внутри.

vurdalak ★★★★★
() автор топика
Ответ на: комментарий от vurdalak

я вообще не понимаю в js
во http://stackoverflow.com/questions/275761/how-to-get-selected-text-from-textb...
я бы можно потом перевести весь тектс в массив по .split(«\n») по номерам начала и конца выделения найти подстроки в массиве

ii343hbka ★★★
()

Гадить в буфер только флеш умеет.

Kalashnikov ★★★
()
Ответ на: комментарий от ii343hbka
<html>
<head>
<script>
function magic(object) {
  var textComponent = object;
  var textArray = textComponent.value.split("\n");
  var selectedText, selStartPos, selEndPos;
  if (textComponent.selectionStart != undefined) {
    var selStartPos = textComponent.selectionStart;
    var selEndPos = textComponent.selectionEnd;
  }
  if( (selStartPos + selEndPos) == 0 ) return;
  // start && end
  var modStartPos = 0;
  var modEndPos = 0;
  for( var i = 0, tl = 0; i < textArray.length; i++ ) {
    tl += textArray[i].length;
    if( (tl) <= selStartPos ) { modEndPos = modStartPos = i; }
    if( (tl) >= selEndPos ) { modEndPos = i; break; }
  }
  alert("start && end = "+modStartPos+" && "+modEndPos+"");
}
</script>
</head>
<body>
<textarea id="ta" name="ta" onMouseUp="magic(this)">
lognglognglognglognglognglognglognglognglogng
lognglognglognglognglognglogng
shortshortshort
a  a  
a
</textarea>
</body>
</html>

есть косяк - не ловит стык строк, т.е. если выбираешь от начала первой до конца второй, он считает как от 0 до 3
если доделать условия, то заработает
может правильнее будет не в одном цикле считать, а в двух

ii343hbka ★★★
()
Последнее исправление: ii343hbka (всего исправлений: 2)
Ответ на: комментарий от vurdalak

Исправил багу, которая возникала, если начало выделения попадало на «\n». Смотри последнюю версию.

theNamelessOne ★★★★★
()
Ответ на: комментарий от vurdalak

Нашел. Скомпилил в js и немного переделал (правда в скомиленном виде там ад, надо разобраться и переписать на чистом js.

vurdalak ★★★★★
() автор топика
Ответ на: комментарий от theNamelessOne

Да, точно. Но я об этом подумал уже после того, как поставил coffeescript :)

vurdalak ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.