你没有做错任何事。 js-beautify 肯定有错误和限制。您很可能会遇到其中之一。你应该提出问题。
也就是说,将所有元素放在单独的行上是否正确比一开始看起来要复杂一些。 js-beautify 比使用一系列正则表达式或将 HTML 视为 XML 的工具要准确得多,但它也不会在格式化之前完全解析 HTML,所以一些看起来应该是微不足道的行为是未实施,因为该工具没有足够的信息来安全地执行此操作。
示例 1:HTML 不是 XML
例如,如果输入是 XML,那么上面显示的所需格式化输出就可以了。但是,因为这是 HTML,所以问题中显示的所需输出 HTML 将与输入显示不同。
鉴于此 HTML(示例输入):
<h2><strong><a href="http://awesome.com">AwesomeCom</a></strong><span>is awesome</span></h2>
显示的文本将如下所示:
AwesomeComis awesome
鉴于此 HTML(所需的输出):
<h2>
<strong>
<a href="http://awesome.com">AwesomeCom</a>
</strong>
<span>is awesome</span>
</h2>
显示的文本将如下所示:
AwesomeCom is awesome
给定输入的格式化输出 HTML 可能是以下任何一种:
<h2>
<strong><a href="http://awesome.com">AwesomeCom</a></strong><span>is awesome</span>
</h2>
<h2><strong><a href="http://awesome.com">AwesomeCom</a></strong><span>is awesome</span></h2>
但这绝对不是问题中显示的所需输出 HTML,抱歉。
示例 2:向 HTML 添加空格可能会改变布局
接下来,让我们考虑一下为什么 <strong> 和 <a> 可能无法安全分开。如果输入如下,那么在<strong> 和<a> 之间添加空格会产生不同的显示文本:
<h2>The<strong><a href="http://awesome.com">AwesomeCom</a></strong><span>is awesome</span>!</h2>
在原始输入的情况下,添加换行符<strong> 和<a> 是安全的,因为<h2> 和<strong> 之间没有文本,但js-beautify 不够聪明,无法确定那个。即使是这样,这是否是正确的行为也是有争议的。这样做会产生以下行为,其中格式因前导文本和/或空格的存在而有很大差异:
<!-- Input -->
<h2><strong><a href="http://awesome.com">AwesomeCom</a></strong><span>is awesome</span>!</h2>
<h2>The<strong><a href="http://awesome.com">AwesomeCom</a></strong><span>is awesome</span>!</h2>
<!-- Output -->
<h2>
<strong>
<a href="http://awesome.com">AwesomeCom</a></strong><span>is awesome</span>!
</h2>
<h2>
The<strong><a href="http://awesome.com">AwesomeCom</a></strong><span>is awesome</span>!
</h2>
示例 3:接近“真实世界”的输入
最后,让我们考虑一个更像可能的意思的输入,在合理的地方有空格:
<h2>The <strong><a href="http://awesome.com">AwesomeCom</a></strong> <span>is awesome</span>!</h2>
示例 3-a:多个有效的“美化”HTML 输出
有很多方法可以重新格式化它。 h2 标签忽略它和它的内容之间的空格,并且在已经有空格的地方添加更多的空格是安全的。以下所有示例都是合理的,具体取决于您询问的对象:
<h2>The <strong><a href="http://awesome.com">AwesomeCom</a></strong> <span>is awesome</span>!</h2>
<h2>
The <strong><a href="http://awesome.com">AwesomeCom</a></strong>
<span>is awesome</span>!
</h2>
<h2>
The
<strong><a href="http://awesome.com">AwesomeCom</a></strong>
<span>is awesome</span>!
</h2>
示例 3b:无效的“美化”HTML 输出
有些人甚至会说下一个示例也可以,但我不太确定。
<h2>
The
<strong>
<a href="http://awesome.com">AwesomeCom</a>
</strong>
<span>is awesome</span>!
</h2>
它在<strong> 和<a> 之间添加了一个空格,这是以前没有的。布局引擎会合并<strong>前后的空间吗?如果有 CSS 可以改变所有 <strong> 标签的字体大小呢?这在某些情况下可能是安全的,但会改变同样多的布局。