2

我正在映射从 ajax 调用收到的值。它工作得很好,但在 ie7 中仍然不够快(我收到了一个缓慢的脚本警告)。

我想不出任何办法让这更快。我也尝试过使用原生 javascript 函数,但速度提升可以忽略不计。你们有什么想法吗?

var $audit = $('#audit');

$.each(data, function (i, val) {

    if (val != null && val !== '0') {

        $audit.find('input[type="checkbox"].' + i).attr('checked', val == 1);
        $audit.find('input[type="text"].' + i).val(val);
        $audit.find('select.' + i).val(val);
    }

});

一些伪html:

<div id="audit">
    <input type="text" class="foo1" />
    <input type="checkbox" class="foo2" />
    <select class="foo3">
        <option value="1">1</option>
    </select>
</div>
4

3 回答 3

2

我不知道它是否会有那么大的帮助,但你可以缓存你的输入+选择并过滤它,而不是一遍又一遍地找到“相同”的元素,然后只过滤一个更小的集合中的特定元素:

var $audit = $('#audit'),
    $inputs = $audit.find('input, select');

$.each(data, function (i, val) {
    if (val != null && val !== '0') {
        var current = $inputs.filter('.' + i);
        if(current.is(":checkbox") {
            current.attr('checked', val === 1);
        } else {
            current.val(val);
        }
    }
});
于 2012-11-05T12:19:09.040 回答
1

您可以尝试将其knockout.js用于您的目的。它可能会更快。

这是一个数据绑定的例子:http: //knockoutjs.com/examples/controlTypes.html

于 2012-11-05T12:19:46.813 回答
1

每次迭代,当作用域链不断进入和离开 DOM 时,它的速度很慢也就不足为奇了。然而,这个循环需要很长时间,这引出了一个问题:页面上有多少个这些 div?如果它超过 50 左右,那么你就有一个 UI 设计问题。

要使这个速度显着加快,确实需要对代码进行彻底的重新设计。如果是我,我会构建一个包含重复 div 作为 javascript 字符串的 HTML framgent,然后使用单个 createElement/设置 innerHTML 将其拼接到页面中

于 2012-11-05T12:40:43.320 回答