You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Svelte读取TXT文件后如何实现内容逐行显示(添加换行或分段)

解决TXT文件内容换行显示的问题

你遇到的问题很常见——HTML 默认会把文本里的换行符 (\n) 当作普通空格处理,所以你的每行条目会挤在同一行。下面给你两种简单的解决思路,都能适配你的 Svelte 代码:

方法一:每行内容单独生成一个段落

这种方式更符合语义化,适合需要给每行单独设置样式的场景。我们可以把读取到的文本按换行符分割成数组,再遍历数组生成 <p> 标签,同时过滤掉可能的空行:

<input type='file' multiple bind:files> 
{#if files}
  <h2>Files selected: </h2>
  {#each Array.from(files) as file}
    <p>The imported file is: {file.name}</p>
    {#await file.text() then text}
      {#each text.split('\n').filter(line => line.trim() !== '') as line}
        <p>{line}</p>
      {/each}
    {/await}
  {/each}
{/if}

这里的 text.split('\n') 把整个文本拆成每行的数组,filter(line => line.trim() !== '') 是为了跳过文件里的空行(比如末尾可能存在的空行),避免生成多余的空段落。

方法二:用 <br> 替换换行符

如果不需要单独的段落,只是想让内容换行显示,可以把文本里的换行符替换成 <br> 标签,再用 Svelte 的 {@html} 指令渲染(因为默认情况下 Svelte 会转义 HTML 标签,直接写 <br> 会被当成文本显示):

<input type='file' multiple bind:files> 
{#if files}
  <h2>Files selected: </h2>
  {#each Array.from(files) as file}
    <p>The imported file is: {file.name}</p>
    {#await file.text() then text}
      <p>{@html text.replace(/\n/g, '<br>')}</p>
    {/await}
  {/each}
{/if}

注意:使用 {@html} 时要确保文本内容是安全的(比如你自己上传的本地文件),避免 XSS 风险——不过你的场景是读取本地文件,所以不用担心这个问题。

另外顺便提一句,你的原代码里有个小笔误:bind:files' 多了个单引号,改成 bind:files 就可以正常绑定文件了。

内容的提问来源于stack exchange,提问作者Dorian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 18:09:06