【发布时间】:2010-10-12 09:48:53
【问题描述】:
如何在 JavaScript 中格式化/整理/美化 HTML? I have tried doing a search/replace for angle brackets (<, >) and indenting accordingly. 当然不考虑HTML里面是JS还是CSS等。
我想这样做的原因是我制作了一个内容编辑器 (CMS),它同时具有所见即所得和源代码视图。所见即所得编辑器编写的代码的问题通常是一行。所以我想要一个可以按需将其格式化为更易读的形式的 JavaScript。
这是我目前所拥有的:
function getIndent(level) {
var result = '',
i = level * 4;
if (level < 0) {
throw "Level is below 0";
}
while (i--) {
result += ' ';
}
return result;
}
function style_html(html) {
html = html.trim();
var result = '',
indentLevel = 0,
tokens = html.split(/</);
for (var i = 0, l = tokens.length; i < l; i++) {
var parts = tokens[i].split(/>/);
if (parts.length === 2) {
if (tokens[i][0] === '/') {
indentLevel--;
}
result += getIndent(indentLevel);
if (tokens[i][0] !== '/') {
indentLevel++;
}
if (i > 0) {
result += '<';
}
result += parts[0].trim() + ">\n";
if (parts[1].trim() !== '') {
result += getIndent(indentLevel) + parts[1].trim().replace(/\s+/g, ' ') + "\n";
}
if (parts[0].match(/^(img|hr|br)/)) {
indentLevel--;
}
} else {
result += getIndent(indentLevel) + parts[0] + "\n";
}
}
return result;
}
【问题讨论】:
-
有时最好的问题/答案是题外话。
-
@NilsB 垃圾这是话题,实际上它已经作为题外话关闭了,然后又重新打开了
-
您的代码运行良好,但仍需要一些改进。支持更多的单例或空标签。尝试更改匹配方法 if (parts[0].match(/^(area|base|br|col|command|embed|hr|img|input|link|meta|param|source)/))。还更新: return result.trim();而不是 html = html.trim();
标签: javascript jquery html