javascript - 创建嵌套 DIV - 性能提示

标签 javascript html

当提供对象数组时,我需要创建一个由嵌套 DIV 组成的 HTML 输出。

目前我正在使用以下代码,它可以工作。 这个例子非常简单,因为在生产中,我有许多对象和复杂的 HTML 需要创建和初始化。

目前我使用两个循环,一个用于打开 DIV,一个用于关闭 DIV。

我想知道您是否可以建议我另一种方法,考虑性能,例如避免双循环等等。

        (function () {
            var html = '';
            var data = [{ id: 'a' }, { id: 'b' }, { id: 'c' }];

            function open(item) {
                html += '<div id="' + item.id + '">';
            }
            function close(item) {
                html += '</div>';
            }

            for (var i = 0, len = data.length; i < len; i++) {
                open(data[i]);
            }
            for (var i = 0, len = data.length; i < len; i++) {
                close(data[i]);
            }
            alert(html);
            /* RESULT
            <div id="a">
                <div id="b">
                    <div id="c">
                    </div>
                </div>
            </div>
            */

        })();

最佳答案

我认为这是递归的经典案例。

function createHTML(data) {
    var item = data.shift(), div, child;

    if (item) {
        div = document.createElement("DIV");
        div.id = item.id;
        child = createHTML(data, div);
        if (child) div.appendChild(child);
        return div;
    }
}

createHTML([{ id: 'a' }, { id: 'b' }, { id: 'c' }]);

从连接的字符串构建 HTML 比使用 DOM 方法更容易出错,尤其是在恶意或无意损坏的输入方面。因此我一般更喜欢 DOM 方法。

哪种方法最快 - 这取决于您来衡量,但我建议牺牲纯粹的速度而不是正确且有弹性的代码。

关于javascript - 创建嵌套 DIV - 性能提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31588468/

相关文章:

javascript - 未捕获的 DOMException : Blocked a frame with origin "http://localhost:8080" from accessing a cross-origin frame while listing the iframes in page

javascript - 删除表的内容并使用 JavaScript 替换

html - 具有 2 个固定高度图像的 CSS 2 列布局

html - WebRTC:对等连接限制?

html - 三列层中的 100% 宽度?

javascript - 输入文本处于焦点时如何显示父表单?

javascript - $location.path() 更改后在另一个 ng-view 中触发事件

javascript - 查询字符串与 react-router 路由不匹配的 URL

javascript - 在 Opera 中同时按下两个鼠标按钮

javascript - 我怎样才能使网页上的任何地方都可以点击并导航到一个地址而不使整个页面成为一个链接?