วิธีแสดงข้อความหลายบรรทัดในเซลล์ตาราง


119

ฉันต้องการแสดงย่อหน้าจากฐานข้อมูลลงในเซลล์ตาราง

ผลลัพธ์คือ 1 บรรทัดขนาดใหญ่โดยไม่สนใจว่าจะจัดระเบียบอย่างไรในฐานข้อมูล ตัวอย่างเช่นละเว้น 'Enter' (บรรทัดใหม่)

ฉันต้องการแสดงให้ตรงตามวิธีการเขียนในฐานข้อมูล

ตัวอย่างเช่นหากมีการบันทึกย่อหน้าดังนี้:

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 tag จะเพิ่ม CSS เพิ่มเติมเกินความจำเป็น


1
นี่เป็นโซลูชันที่ดีและตรงเป้าหมาย <pre>แท็กไม่ทุกชนิดของสิ่งที่เกินกว่าเพียงช่วยให้ตัวละครขึ้นบรรทัดใหม่ แต่การตั้งค่ารูปแบบเหล่านี้แก้ปัญหาที่นำเสนอ
moveson

ฉันมีปัญหาที่ข้อมูลของฉันมีบรรทัดใหม่ วิธีแก้ปัญหาอื่น ๆ เช่นการแทนที่ข้อความด้วย <br/> หรือ <div> หรือ <pre> จะถือว่าเป็นข้อความเท่านั้น วิธีนี้ใช้ได้ผลอย่างสมบูรณ์ในการเอาชนะปัญหานั้น
Anshuman Goel

ที่ยอดเยี่ยม !! งานนี้ดีมากสำหรับฉัน ฉันมี JDataTable ซึ่งแสดงข้อความหลายรายการและฉันต้องการให้คุณ css ตัดข้อความให้ถูกต้อง! ประหยัดวันขอบคุณมาก!
PatsonLeaner

1
สิ่งนี้ใช้ได้ผลสำหรับฉันในแง่ของการรักษาการแบ่งบรรทัด แต่เพิ่มตัวแบ่งบรรทัดที่ด้านบนของทุกเซลล์ ... มีวิธีแก้ไขไหม
jtr13

30

รวมเนื้อหาไว้ใน<pre>แท็ก (ข้อความที่จัดรูปแบบไว้ล่วงหน้า)

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

3
อย่างไรก็ตามสิ่งนี้จะเขียนทับแบบอักษรด้วย monospace
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>แต่ต้องแยกวิเคราะห์ข้อความอีกเล็กน้อย


7

บนโค้ดด้านเซิร์ฟเวอร์ของคุณเปลี่ยนสายใหม่ ( \n) <br/>ด้วย

หากคุณใช้ PHP คุณสามารถใช้ไฟล์ nl2br()


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



0

หากคุณมีตัวแปรสตริง\nที่คุณต้องการใส่เข้าไปtdคุณสามารถลองได้

<td>
    {value
        .split('\n')
        .map((s, index) => (
            <React.Fragment key={index}>
                {s}
                <br />
            </React.Fragment>
        ))}
</td>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.