为什么javascript换行符不能在html中运行?

时间:2011-04-25 19:39:56

标签: javascript html

所以我有以下内容:

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

你可能都知道\ n不起作用,我必须使用&lt; br&gt;代替。 如果我链接到外部js文件,它将无法工作。以下是我的问题:

1)为什么\n不起作用? 2)为什么&lt; br&gt;甚至工作?不应该是脚本中的所有内容 标签是严格的javascript而不是html和js之间的脏混合? 3)是否有可能以某种方式使\n工作? 4)我知道\t也不起作用。任何其他内部无效的东西 HTML文件?
5)无关的问题(我不想为此开一个新问题)。 我安装了node.js,以便能够从vim内部尝试js脚本 当我运行此脚本时,我收到错误“文档未定义”。当我尝试使用repl时,会发生同样的事情。有什么想法吗?

顺便说一句,我知道这些问题可能已被问过一百万次,但老实说我找不到好的答案,我得到的只是我应该使用&lt;br>代替\n。谢谢你的帮助。

13 个答案:

答案 0 :(得分:12)

  

为什么不工作?

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

  

<br>为什么会工作?

因为它是换行符的HTML

  

脚本标签内的所有内容都不应该是严格的javascript而不是html和js之间的混合?

这是主观的。 document.write被许多人视为肮脏。

您始终可以使用createElementcreateTextNode

  

是否有可能以某种方式使用?

prewhite-space

  

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

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

  

无关的问题(我不想为此开一个新问题)。

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

答案 1 :(得分:5)

\n有效,如果您有各种类型的调试器(或类似的开发人员工具),您可以看到文档源,并且您将看到确实存在换行符。问题在于您查看页面的方式 - 您阅读它的来源,您将其作为html文档阅读。 html中的空格被压缩为单个空格。因此,当您更改源时,它确实会发生更改,但在解释为html文档时,不会显示该更改。

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

答案 2 :(得分:4)

我有:

<div>Hello\nworld</div>

我将以下CSS添加到div类中,并且现在可以正常工作:

div {
      white-space: pre-wrap;
  }

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

答案 3 :(得分:3)

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

使用<br/>代替\n,它可以正常使用

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

答案 4 :(得分:1)

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

因此,需要br标签。

答案 5 :(得分:1)

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

使用Javascript:

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

1)\n适用于纯文本文件。

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

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

4)大多数其他\*

5)需要更多信息。

答案 8 :(得分:0)

1,3。 “\ n”确实有效。如果你在body标签里面做了document.write,你可以查看document.body.innerHTML,看看换行确实在那里。

4.任何特定于HTML的内容都会针对HTML呈现,因此您必须将<>转换为&lt;&gt;

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

答案 9 :(得分:0)

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

Hello
World

答案 10 :(得分:0)

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

答案 11 :(得分:0)

每个人都说过要说的内容,但万一你使用的是firebug / chrome Javascript控制台..然后试试这个&gt;

console.log("Hello\nWorld");

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

答案 12 :(得分:0)

在html上使用<pre></pre>,它将遵循JS中的文本格式。