Как отобразить многострочный текст в ячейке таблицы


119

Я хочу отобразить абзац из базы данных в ячейке таблицы.

Результатом является большая 1 строка, без учета того, как она организована в базе данных. игнорирование, например, "входит" (новые строки)

Я хочу показать это именно так, как это записано в базе данных.

Например, если абзац сохранен так:

hello ,
my name is x.

Я хочу, чтобы это отображалось именно так, а не:

hello, myname is x.

Ответы:


164

Вы хотите использовать CSS, white-space:preпримененный к соответствующему файлу <td>. Чтобы сделать это со всеми ячейками таблицы, например:

td { white-space:pre }

В качестве альтернативы, если вы можете изменить разметку, вы можете использовать <pre>тег вокруг своего контента. По умолчанию веб-браузеры используют свою таблицу стилей агента пользователя, чтобы применить то же white-space:preправило к этому элементу.

Элемент PRE сообщает визуальным пользовательским агентам, что заключенный текст «предварительно отформатирован». При обработке предварительно отформатированного текста визуальные пользовательские агенты:

  • Может оставить пустое пространство нетронутым.
  • Может отображать текст шрифтом с фиксированным шагом.
  • Может отключить автоматический перенос слов.
  • Не следует отключать двунаправленную обработку.

Недурно white-space- это свойство CSS 2.1, которое широко поддерживается. Проверено на IE8, отлично работает.
leesei

Я сейчас в ситуации, когда white-space: pre;игнорируется при применении в <td>теге. Использование <pre></pre>для переноса нашего содержимого работает нормально, но из-за использования этой таблицы (экспорт в Excel) большие # столбцов и строк увеличивают размер экспортируемого файла и вызывают сбой Excel при чтении файла. (странно, я знаю). Кто-нибудь еще видел это или есть идея решения?
JoeBrockhaus

1
Это решение далеко не идеальное. В результате Excel создает несколько строк для ячеек с разрывами строк. Единственно правильный ответ можно найти здесь: bennadel.com/blog/…
Elmue

55
style="white-space:pre-wrap; word-wrap:break-word"

Это решило бы вопрос с новой линией. тег pre добавит дополнительный CSS, чем требуется.


1
Это красивое целенаправленное решение. <pre>Тег делает все виды вещей за раз , позволяя символы новой строки, но эти настройки стиля только решить проблему представили.
moveson

У меня возникла проблема, в которой мои данные содержат новую строку. Другое решение, такое как замена текста на <br/>, <div> или <pre>, обрабатывалось только как текст. Это решение отлично справляется с этой проблемой.
Аншуман Гоэль

Фантастика!! Это очень хорошо работает для меня. У меня был JDataTable, в котором перечислялся многословный текст, и мне нужен был CSS, чтобы правильно обернуть текст! Day Saver Большое спасибо!
PatsonLeaner 09

1
Это работает для меня с точки зрения сохранения разрывов строк, но добавляет разрыв строки в верхнюю часть каждой ячейки ... какие-либо решения?
jtr13

30

Оберните содержимое в <pre>тег (предварительно отформатированный текст)

<pre>hello ,
my name is x.</pre>

3
Однако при этом шрифт заменяется моноширинным.
hardmooth

23

Два предложения по решению этой проблемы:

РЕШЕНИЕ 1: <div style="white-space:pre;">{database text}</div>или<pre>{database text}</pre>

Это хорошее решение, если в вашем тексте нет тегов html или свойств css. Также позволяет, например, вести вкладки.

РЕШЕНИЕ 2: Заменить \nна<p></p> or <br/>

Это решение, если вы просто хотите добавить линии разрыва без потери других свойств текста или форматирования. Примером на php будет$text = str_replace("\n","<br />",$database_text);

Вы также можете использовать <p></p>или <div></div>, но для этого потребуется немного больше синтаксического анализа текста.



6

Привет, мне нужно было сделать то же самое! Не спрашивайте, почему, но я генерировал html с помощью python и нуждался в способе перебирать элементы в списке, чтобы каждый элемент занимал собственную строку ВНУТРИ ОДНОЙ ЯЧЕЙКИ таблицы.

Я обнаружил, что тег br мне подходит. Например:

<!DOCTYPE html>
<HTML>
    <HEAD>
        <TITLE></TITLE>
    </HEAD>
    <BODY>
  <TABLE>
            <TR>
                <TD>
                    item 1 <BR>
                    item 2 <BR>
                    item 3 <BR>
                    item 4 <BR>
                </TD>
            </TR>
        </TABLE>
  </BODY>

Это даст результат, который я хотел.


5

Я использую тег кода html после каждой строки (см. Ниже), и у меня это работает.

George Benson </br> 123 Main Street </br> New York, Ny 12344 </br>


2
это должен быть комментарий, а не ответ.
Deep Sharma

<br> нарушает семантику таблицы. При просмотре таблицы с помощью текстового браузера новые строки отображаются как строки таблицы.
JAT86


1

Я добавил только <br>внутри, <td>и он работает хорошо, разрыв строки!


0

Если у вас есть строковая переменная \n, которую вы хотите поместить внутрь td, вы можете попробовать

<td>
    {value
        .split('\n')
        .map((s, index) => (
            <React.Fragment key={index}>
                {s}
                <br />
            </React.Fragment>
        ))}
</td>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.