繁体   English   中英

为什么 JavaScript 换行符在 HTML 中不起作用?

[英]Why doesn’t JavaScript newlines work inside HTML?

我有以下内容:

<html>
  <body>
    <script type="text/javascript">
      document.write('Hello\nWorld')
    </script>
  </body>
</html>

您可能都知道, \n不起作用,我必须改用<br> 如果我链接到外部.js文件,它也不会起作用。 这是我的问题:

  1. 为什么\n不起作用?
  2. 为什么<br>甚至可以工作? 脚本标签内的所有内容不应该严格为 JavaScript 而不是 HTML 和 JS 之间的肮脏混合吗?
  3. 是否有可能使\n以某种方式工作?
  4. 我知道\t也不起作用。 还有其他在 HTML 文件中不起作用的东西吗?
  5. 不相关的问题(我不想为此打开一个新问题):我安装了 Node.js 以便能够从 vim 内部试用 JS 脚本但是当我运行这个脚本时我得到错误“ document未定义”。 当我从 REPL 尝试时,同样的事情发生了。 有任何想法吗?

在搜索类似问题时,我得到的只是我应该使用<br>而不是\n

为什么\\n不起作用?

因为空白只是 HTML 中的空白。

为什么<br>甚至可以工作?

因为它是换行符的 HTML

脚本标签内的所有内容不应该是严格的 JavaScript 而不是 HTML 和 JS 之间的肮脏混合吗?

那是主观的。 许多人也认为document.write很脏。

您始终可以使用createElementcreateTextNode

是否有可能以某种方式使\\n工作?

<pre> , white-space

我知道\\t也不起作用。 任何其他在 HTML 文件中不起作用的东西?

HTML 不是纯文本。 列出所有差异将非常耗时,并且超出 Stack Overflow 的范围。 尝试阅读规范。

不相关的问题(我不想为此打开一个新问题)

它是完全不相关的。 打开一个新问题。

我有:

<div>Hello\nworld</div>

我将下面的 css 添加到div类,现在它正在工作:

div {
      white-space: pre-wrap;
  }

我希望这也能解决你的问题。

\\n有效。 如果您有各种调试器(或类似的开发人员工具),您可以查看文档源,并且您会看到确实有换行符。 问题在于您查看页面的方式:您不是在阅读其源代码,而是将其作为 HTML 文档阅读。 HTML 中的空白被折叠成一个空格。 因此,当您更改源时,它确实会发生变化,尽管当解释为 HTML 文档时,该更改不会显示。

您的 Node.js 错误很可能是由于您在服务器上运行浏览器脚本造成的。 即引用document脚本旨在在浏览器中运行,其中有一个 DOM 等。虽然通用节点进程没有这样的全局对象,因为它不是浏览器。 因此,当您尝试运行引用名为document的全局对象的代码时,假设它就像在浏览器中一样存在,它将抛出错误。 document.write不存在; 如果您想写入屏幕,请尝试使用console.log或查看其他 util 函数。

当 HTML 呈现时,它会忽略空格。 因此,唯一的方法是使用换行符。

使用<br/>而不是\\n它将工作正常

document.write()函数将 HTML 写入元素。

在 html 上使用<pre></pre> ,它将尊重来自 JS 的文本格式。

当您写入页面时,您不是在编写 JavaScript; 您正在编写 HTML。 \\n 是一个特殊的“换行”字符,它不会在浏览器呈现 HTML 时创建换行符。 它会在 HTML 文件本身中创建一个换行符,但浏览器在呈现标记时不会考虑这一点。

因此,需要 br 标签。

使用 html 标签<br/>输入行结尾(您的输出由 html 解析器解释),例如:

Javascript:

document.write("Hello<br/>World");

JavaScript 发出的空格与 HTML 文件中的任何其他空格一样。 这对我来说似乎是预期的行为。

1) \\n在纯文本文件中工作。

2) <br />有效,因为您在字符串中执行 HTML。 字符串可以保存字符而不会破坏 JS 脚本的其余部分。

3) 不是真的。 也许当您使用<textarea>

4) 大多数其他\\*

5)需要更多信息。

1,3。 "\\n" 确实有效。 如果您在 body 标签内执行 document.write,您可以检查 document.body.innerHTML 并查看是否确实存在换行符。

4.任何特定于 HTML 的内容都将呈现特定于 HTML 的内容,因此您必须将<>转义为&lt; &gt; 例如。

5. document是一个在浏览器中可用的对象,它没有在 node 中使用,因为那里不存在 DOM。 require("sys"); 并在 nodejs 中使用 sys.print。

document对象代表一个 HTML 文档; 写入文档的任何文本都将由浏览器的 HTML 渲染器处理。 在 HTML 中,所有相邻的空格,包括换行符(例如, "\\n" ),在渲染时都会折叠成一个空格。 这就是为什么你需要<br /> ,它被呈现为一个换行符。 您可以通过用<br />替换它或写入<pre>元素来使\\n工作:

Hello
World

简短的回答:

如果您查看源代码,您会发现\n确实有效,但 HTML 会跳过任何空格,而不仅仅是一个。 要获得新行,您可以使用<pre><br />

其实你的代码是有效的。 当您在 Firefox 等浏览器控制台上运行它时,它会显示:

<html><head></head><body>
    <script type="text/javascript">
      document.write('Hello\nWorld')
    </script>Hello
World

</body></html>

注意分开的 Hello 和 World。

但是当在 HTML 上显示时,将省略换行符(空格)。

要“按原样”显示,您可以使用 PRE 标记将 javascript 括起来,例如:

<html>
  <body>
    <pre>
    <script type="text/javascript">
      document.write('Hello\nWorld')
    </script>
    </pre>
  </body>
</html>

您将在 HTML 上显示换行符。

每个人都说过要说的话,但如果您使用的是 firebug/chrome Javascript 控制台 ..然后试试这个 >

console.log("Hello\\nWorld");

这是关键的区别。 当您在 HTML 中打印某些内容时,HTML 规则适用。 在其他地方,您可以看到换行符起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM