Я пытаюсь выяснить, есть ли способ для углового или просто чистого javascript получить значение строки текстового поля?
У меня есть проект, над которым я работаю с текстовым полем фиксированного размера, когда он достигает определенного количества символов, его необходимо перенести на новую строку (не обязательно разрыв строки). В моем проекте мне нужно публиковать каждую строку текста, как если бы это был новый объект на сервере. Так, например, если человек набирает действительно длинное предложение, любое слово (слова), превышающее лимит символов, необходимо перенести в новую строку. Затем мне нужно отправить данные обратно на сервер, как если бы каждая отображаемая строка была новым объектом.
Это то, что я начал создавать, но понял, что это не сработает для моих нужд, так как длинное предложение или абзац может не иметь разрыва строки, а каждая строка имеет не совсем одинаковую длину в символах, потому что длинное слово может обернуться новым ряд
Test(textarea) {
console.info(textarea)
let data = [];
console.info(this.test)
data = this.test.split('\n');
data.forEach(element = > {
var item = {
text: element
}
console.info(item)
});
}
Имейте в виду ... вы не можете действительно доверять, в какой момент текстовое поле обертывается ... пользователь может увеличивать текст, изменять размер текстового поля и т.д .. В конечном итоге вам просто нужно выбрать максимальную длину строки а затем соответствующим образом разделить контент ... что на самом деле упрощает решение из-за того, что вам не нужно возиться с текстовым полем.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно провести небольшой синтаксический анализ, чтобы удовлетворить требования - вот что я придумал:
const maxLength = 20;
const splitToLength = sentence => {
if (sentence.length <= maxLength) {
return [sentence];
}
const index = sentence.lastIndexOf(' ', maxLength);
return [
sentence.substr(0, index),
splitToLength(sentence.substr(index +1))
].flat();
}
const input = 'Lorem ipsum dolor amet kombucha health goth put a bird on it, kogi photo booth hella whatever butcher.\nSingle-origin coffee food truck thundercats small batch banh mi franzen blog snackwave deep v plaid narwhal vaporware. Cold-pressed snackwave bitters cardigan, palo santo chillwave wayfarers street art tote bag flexitarian selvage four loko. Next level affogato vice poutine brooklyn sustainable raw denim normcore post-ironic williamsburg.\nReadymade butcher meh, subway tile bushwick biodiesel helvetica cred ethical mixtape meditation plaid. Ugh banjo snackwave street art coloring book iceland lomo mlkshk DIY vape edison bulb. Copper mug salvia sustainable next level artisan coloring book ugh distillery schlitz listicle food truck etsy offal adaptogen iceland.'
const output = input
.split('\n')
.map(splitToLength)
.flat()
.map(text => ({text}));
console.info(output);
К сожалению, элемент
<textarea>не имеет понятия «линии», поэтому этот вопрос всегда приводит к довольно сложному для реализации решению. Возможно, стоит прочитать этот вопрос: stackoverflow.com/questions/38102776/… (хотя я не уверен, что это обман).