基于javascript的整洁的HTML代码

时间:2013-12-01 14:25:39

标签: javascript html indentation

我正在编写一个可以整理html代码的javascript函数。 (javascript和css代码整理时没必要)

这是我的代码。并在http://jsfiddle.net/2q26K/

上查看
function tidyHtml(html) {
    var html = html.trim().replace(/>[^<]+</gm, function ($1) {
        return '>' + $1.substr(1, $1.length - 2).trim() + '<';
    }).replace(/>\s+</gm, '><');
    var containerElement = document.createElement('div');
    containerElement.innerHTML = html;
    var result = containerElement.innerHTML;
    var findLevel = function (child, parent) {
        var level = 0;
        while (child != parent) {
            child = child.parentNode;
            level++;
        }
        return level;
    }
    Array.prototype.slice.call(containerElement.getElementsByTagName('*')).forEach(function (element) {
        var tabs = new Array(findLevel(element, containerElement) - 1).join('   '),
            tabs2 = (element.parentNode.lastChild == element) ? ('\n' + tabs.substring(0, tabs.length - 1)) : '',
            containerElement = document.createElement('div');
        containerElement.appendChild(element.cloneNode(true));
        result = result.replace(containerElement.innerHTML, '\n' + tabs + containerElement.innerHTML + tabs2);
    });
    return result;
}

在提供的示例中,它完美运行。

但是,有时当html代码那样:http://jsfiddle.net/2q26K/1/

它拒绝改变

<div id="hlogo">
    <a href="/">Stack Overflow</a>ABC</div>

<div id="hlogo">
    <a href="/">Stack Overflow</a>ABC
</div>

无法解决。它太复杂了。有没有更简单的方法可以做同样的事情?

有任何建议可以改进我的代码,或者我可以学习的任何示例吗?

2 个答案:

答案 0 :(得分:1)

您可以使用this我在11346108

中找到它

答案 1 :(得分:0)

如果速度不是问题,你可以使用$(String).html()方法as explained here

在生成的html字符串上运行jquery解析器(或者带节点的cheerio)