Val() против text() для textarea

Я использую jQuery и задаюсь вопросом, следует ли использовать val() или text() (или другой метод) для чтения и обновления содержимого текстового поля.

Я пробовал оба, и у меня были проблемы с обоими. Когда я использую text() для обновления textarea, разрывы строк (\n) не работают. Когда я использую val() для извлечения содержимого textarea, текст усекается, если он слишком длинный.

Ответ 1

Лучший способ установить/получить значение текстового поля - это метод .val(), .value.

.text() внутренне использует метод .textContent (или .innerText для IE) для получения содержимого <textarea>. Следующие тестовые примеры иллюстрируют, как text() и .val() относятся друг к другу:

var t = '<textarea>';
console.log($(t).text('test').val());             // Prints test
console.log($(t).val('too').text('test').val());  // Prints too
console.log($(t).val('too').text());              // Prints nothing
console.log($(t).text('test').val('too').val());  // Prints too

console.log($(t).text('test').val('too').text()); // Prints test

Свойство value, используемое .val(), всегда показывает текущее видимое значение, тогда как значение text() может быть неправильным.

Ответ 2

.val() всегда работает с элементами textarea.

.text() работает иногда и не работает в другое время! Он не надежен (проверен в Chrome 33)

Чем лучше .val() работает без проблем с другими элементами формы (например, input), тогда как .text() не работает.

Ответ 3

Выберите <textarea> по имени атрибута вместо id.

<textarea id="message" name="message"></textarea>
<script>
  jQuery("textarea[name='message']").val();
</script>