2016-05-10 5 views
1

Я хочу получить каждую строку в текстовом поле. Текстовая область маленькая и обертывает слова в соответствии с ограничениями ширины. Так что я пробовал:
Textarea - получить каждую строку, найти разрывы строк

// Sample text: I want to find(line wrapped) all lines here 

$("#textarea1").val().split(/(\r\n|\n|\r)/gm).length 
// 1, not the right length, should be 2 

$("#textarea1").val().split(/\r?\n/g).length 
// 1 

$("#textarea1").val().split("\n").length 
// 1 

$("#textarea1").val().split("\r").length 
// 1 

Я также попытался wrap="hard" и white-space: pre-wrap индивидуально и вместе.

Ничего похожего найти перерывы !! Нужна помощь, спасибо.

+0

Я не уверен, что это вообще возможно. Не без прохождения тени DOM (который не каждый браузер имеет). Это связано с тем, что обертка связана с CSS и не сохраняется в значении текстового поля. – evolutionxbox

+1

Этот вопрос представляется чрезвычайно актуальным: http://stackoverflow.com/questions/3738490/finding-line-wraps – evolutionxbox

+0

Хм, это очень актуально, почти делает работу! – vjjj

ответ

0

Так как я сделал это было:

  • Клонирование textarea in question - $("#text") в прозрачный текстовое поле. Используйте прозрачный шрифт.
  • Измените значение id клона на, скажем, $("#newtext") и добавьте его в DOM.
  • На каждой клавиатуре мы принимаем значение $ ("# text") до this character's keyup. Поместите это значение в $("#newtext") и проверьте, $("#newtext").get(0).scrollHeight() > $("#newtext").height(). Если true =>this, символ вызвал разрыв строки.
  • Увеличение рядов $("#newtext") в цикле до
    $("#newtext").get(0).scrollHeight() === $("#newtext").height()
  • Тека текста перед this характером, добавьте \n, добавьте this характер $("#newtext").val()
  • Применить $("#newtext").val() к $("#text").val().
  • Удалить $("#newtext") от DOM.
  • Повторите все вышеперечисленные шаги на каждом KeyUp случае

Над ответом работает на тех же линиях, как - stackoverflow.com/questions/3738490/finding-line-wraps – evolutionxbox yesterday

Итак, в основном мы преобразуем разрывы строк в символы перевода строки, которые могут быть найдены с помощью $("#text").val().split("\n").

(Примечание - Если мы не будем добавлять прозрачный текстовое поле в DOM, его scrollHeight() будет undefined)

0

Я думаю, что это точно так же, как вы сказали: textarea обертывает слова в соответствии с ограничениями ширины - это означает, что вы не найдете разрывов строк. Разрывы строк, которые вы ищете, являются символами, и эти символы не были вставлены в ваш текст.

+0

Проблема с обнаружением ширины символов зависит от размера шрифта, а также от типа шрифта. Например, в Тахоме ширина l (малая L) меньше, чем G, я бы предположил, что разница меньше для Times New Roman. Это усложняет ситуацию. – vjjj

Смежные вопросы