12

我有以下内容:

<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.

4

13 回答 13

19

为什么不起作用\n

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

为什么还<br>有效?

因为它是换行的 HTML

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

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

您可以随时使用createElementcreateTextNode

有可能以\n某种方式工作吗?

<pre>,white-space

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

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

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

这是完全无关的。打开一个新问题。

于 2011-04-25T19:52:31.550 回答
16

我有:

<div>Hello\nworld</div>

我将以下 css 添加到div类中,现在可以使用:

div {
      white-space: pre-wrap;
  }

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

于 2020-07-26T12:44:54.757 回答
9

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

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

于 2011-04-25T19:48:22.827 回答
4

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

使用<br/>代替,\n它会正常工作

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

于 2011-04-25T19:42:30.597 回答
3

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

因此,需要 br 标签。

于 2011-04-25T19:41:19.060 回答
3

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

于 2018-08-18T22:13:39.153 回答
2

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

Javascript:

document.write("Hello<br/>World");
于 2011-04-25T19:41:30.187 回答
0

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

于 2011-04-25T19:42:28.807 回答
0

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

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

3) 不是真的。也许当你使用<textarea>s.

4) 大多数其他\*

5) 需要更多信息。

于 2011-04-25T19:44:57.020 回答
0

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

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

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

于 2011-04-25T19:49:53.503 回答
0

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

你好
世界
于 2011-04-25T19:50:02.810 回答
-1

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

console.log("Hello\nWorld");

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

于 2011-04-25T21:16:23.663 回答
-1

实际上你的代码是有效的。当您在 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 上显示换行符。

于 2011-04-25T19:51:25.123 回答