У меня jQuery берет содержимое текстового поля и вставляет его в li.
Я хочу, чтобы он визуально сохранял разрывы строк.
Должен быть действительно простой способ сделать это ...
javascript
jquery
line-breaks
gbhall
источник
источник
Ответы:
источник
вы можете просто сделать:
источник
Поместите это в свой код (желательно в общую библиотеку функций js):
Использование:
создание функции прототипа строки позволяет использовать ее в любой строке.
источник
В духе изменения рендеринга вместо изменения содержимого следующий CSS заставляет каждую новую строку вести себя как
<br>
:Почему два правила:
pre-line
влияет только на символы новой строки (спасибо за подсказку, @KevinPauli). IE6-7 и другие старые браузеры возвращаются к более экстремальным,pre
которые также включаютnowrap
и отображают несколько пробелов. Подробности об этих и других настройках (pre-wrap
) см. В mozilla и css-tricks (спасибо @Sablefoste).Хотя я, как правило, не склонен угадывать вопрос, а не отвечать на него, в этом случае замена новой строки
<br>
разметкой может повысить уязвимость к атакам путем инъекции с немытым вводом пользователя. Вы пересекаете ярко-красную линию всякий раз, когда обнаруживаете, что меняете.text()
вызовы,.html()
которые, как следует из буквального вопроса, должны быть выполнены. (Спасибо @AlexS за то, что подчеркнули этот момент.) Даже если вы исключаете угрозу безопасности в то время, будущие изменения могут непреднамеренно ввести ее. Вместо этого этот CSS позволяет получить жесткие разрывы строк без разметки, используя более безопасный.text()
.источник
white-space:
варианты, напримерpre-wrap
. См. Css-tricks.com/almanac/properties/w/whitespace.html()
для установки содержимого, что, в свою очередь, позволит пользователю вставлять произвольный HTML-код, если вы не отфильтруете его заранее..html()
опасности @AlexS, попытался включить.Решение
Используйте этот код
источник
Эта функция JavaScript определяет, использовать ли вставку или замену для обработки свопа.
(Вставьте или замените разрывы строк HTML)
Демо - JSFiddle
источник
Я написал для этого небольшое расширение jQuery:
источник
чтобы улучшить принятый ответ @Luca Filosofi,
при необходимости изменение начального предложения этого регулярного выражения на «
/([^>[\s]?\r\n]?)
будет» также приведет к учету случаев, когда новая строка идет после тега И некоторого пробела, а не просто тега, сразу за которым следует новая строкаисточник
Другой способ вставить текст из текстового поля в DOM, сохраняя разрывы строк, - это использовать свойство Node.innerText, которое представляет отображаемое текстовое содержимое узла и его потомков.
Как получатель, он приблизительно соответствует тексту, который пользователь получил бы, если бы выделил содержимое элемента курсором, а затем скопировал его в буфер обмена.
Свойство стало стандартом в 2016 году и хорошо поддерживается современными браузерами. Могу ли я использовать : 97% глобальное покрытие, когда я опубликовал этот ответ.
источник