Всегда ли значение разрыва строки textarea нормализовано до строки javascript "\n"?

Имея систему Windows, я обнаружил, что значение textarea, состоящее из одного разрыва строки, равно строке JavaScript "\n", а не "\r\n":

console.info(document.getElementById("textarea").value === "\n"); // true
console.info(document.getElementById("textarea").value === "\r\n"); //false
<textarea name = "" id = "textarea" cols = "30" rows = "10">

</textarea>

Означает ли это, что я не должен беспокоиться о проблеме CRLF и LF при работе со значениями textarea, поскольку их разрывы строк всегда нормализованы к строке "\n" === "\u{000A}", поэтому я могу с уверенностью сказать, что lineBreakOnlyValue.length === 1 и выполнить такое задание document.getElementById("textarea").value = "\n" не задумываясь о адресации разрыва строки в разных системах?

Было ли это поведение каким-то образом задано?

более старые версии IE использовали \r\n, но теперь все (даже блокнот окна) остановились на \n, включая вставку в. Единственное место, где \r\n может закрасться (на самом деле), это когда FileReader выгружает результат readAsBinaryString() из значения файла, использующего \r\n, в textarea.value. Короче говоря, нет, вам действительно не нужно беспокоиться об этом.

dandavis 25.05.2023 21:16
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
1
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В текущем стандарте HTML говорится об элементе текстовой области :

Значение API — это значение, используемое в атрибуте value IDL, атрибуте textLength IDL и атрибутах содержимого maxlength и minlength. Он нормализован таким образом, что для разрывов строк используются символы U+000A LINE FEED (LF).

[...] Алгоритм получения значения API элемента состоит в том, чтобы вернуть необработанное значение элемента с нормализованными символами новой строки.

Нормализация новых строк описывается как следует:

Чтобы нормализовать символы новой строки в строке, замените каждую пару кодовых точек U+000D CR U+000A LF на одну кодовую точку U+000A LF, а затем замените каждую оставшуюся кодовую точку U+000D CR на кодовую точку U+000A LF.

Сравнение с другими свойствами

В то время как свойство value подлежит этой нормализации, свойства textContent, innerHTML, ... нет.

Небольшая демонстрация:

console.info("innerHTML", JSON.stringify(txt.innerHTML));
console.info("textContent", JSON.stringify(txt.textContent));
console.info("value", JSON.stringify(txt.value));
<textarea id = "txt">a&#13;&#10;b</textarea>

Интересно, когда мы нажимаем клавишу enter при использовании системы Windows, будет ли textarea получать CRLF в виде необработанного значения или браузер сам нормализует его до LF?

Ilya Loskutov 26.05.2023 11:50

Я не знаю. Конечно, это возможно, но поскольку JavaScript не может получить доступ к измененному необработанному значению, а только к нормализованному значению, он прозрачен для JavaScript.

trincot 26.05.2023 12:38

Другие вопросы по теме