【问题标题】:Javascript - append pieces of text and htmlJavascript - 附加文本和 html
【发布时间】:2015-12-10 14:37:26
【问题描述】:

我正在尝试构建一个具有“终端外观”的网页,其中似乎正在输入文本。

我这样做是通过将 .txt 文件内容加载到字符串 var 中,设置一个“速度”(int)来定义一次读取多少个字符,然后在 @987654321 中调用 write 函数@。在写入功能上,我选择要使用$("#console").append(text.substring(index, (index+speed))); 写入的文本位,然后使用index += speed 递增

但是,.txt 内容具有纯文本以及 Html 标签(用于格式化文本),当这些内容输入浏览器时,html 标签显示不正确。例如,我的 txt 中看起来像 <span> This is a test </span> 的一些文本将看起来像 > This is a test! </span>(而不仅仅是“这是一个测试”)

如果我使用 .html(str) 并将子字符串作为 .substring(0, index) 传递,内容将被正确输入,但这对我不起作用,因为我想将多个 .txt 加载到同一页面中,并且 .html () 只是替换整个内容。

我知道这有点令人困惑,也很难解释,所以请随时问任何你不明白的地方。

【问题讨论】:

  • 您能否在此页面表单的某行中显示您获取此文本的位置
  • 我做到了,第一行。 <span> This is a test </span>

标签: javascript jquery html append


【解决方案1】:

你可以看看TypedJS

依赖于jQuery

希望对你有帮助!

【讨论】:

    【解决方案2】:

    您可能需要解码 HTML 字符串。试试这个:

    var decodedString = $("<div />").html(text.substring(index, (index+speed))).html();
    $("#console").append(decodedString);
    

    这基本上创建了一个 div,解析并在该 div 中创建 html。然后我们从 div 中获取 html 并附加到我们真正想要的位置。

    编辑

    所以你的问题是你将&lt;span&gt; This is a test &lt;/span&gt; 分解成更小的块。附加任何部分 html 将永远不会起作用。 jQuery 无法正确解析它。 &lt;spa + n&gt;stuff + &lt;/sp + an&gt; 不能单独插入并期望它正确呈现。有时 jQuery 会尝试填补缺失的部分,但不要依赖于此。而是将您的文本分解为跨度:

    var decoded1 = $("<div />").html("<span> Thi</span>").html();
    var decoded2 = $("<div />").html("<span>s is a tes</span>").html();
    var decoded3 = $("<div />").html("<span>t </span>").html();
    
    $("#console").append(decoded1);
    $("#console").append(decoded2);
    $("#console").append(decoded3);
    

    当然,您将不再需要解码任何内容。您可以直接附加这些部分,它会起作用。

    $("#console").append("<span> Thi</span>");
    $("#console").append("<span>s is a tes</span>");
    $("#console").append("<span>t </span>");
    

    【讨论】:

    • 你能详细解释一下这是做什么的吗?我试过了,但它不起作用,结果完全一样。我只是不确定是否需要针对我在 txt 中使用的 html 标签进行调整
    • 你说使用.html() 有效。但总是取代一切。所以我建议使用.html(),但使用丢弃的div,然后从该div 中获取html 并附加console。我很惊讶那没有用。
    • 看到了吗? jsfiddle.net/AtheistP3ace/xtLsyz8h 你确定要提取的值是正确的字符串,而不是像 &gt; This is a test &lt;/span&gt; 这样的字符串吗?
    • 好吧,在那个例子中,您一次性添加了整个字符串。但是为了获得打字机效果,我以小块的形式添加文本(例如一次 5 个字符,间隔为 30 毫秒)。所以第一个块只是&lt;span,第二个块是&gt; Thi,依此类推。见jsfiddle.net/xtLsyz8h/2
    • 那正是你的问题。您必须加载完整的 html 而不是部分标签。我建议将字符串片段分解为每个文本块的单独跨度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    相关资源
    最近更新 更多