IE7中的慢脚本 - 最快的jquery选择器

时间:2011-12-30 10:36:47

标签: jquery json internet-explorer-7

$.each(data, function (i, val) {
                        $(':checkbox.' + i).prop('checked', (val == 1 ? true : false));
                        $(':text.' + i + ', select.' + i).val(val);
                    });

data是一个JSON对象。当我运行它时,IE7会对缓慢的脚本大哭。我将值从json对象映射到类名“i”。有没有办法让这个选择器运行得更快?代码有效,但迭代每个元素的速度必须更快,以摆脱ie7慢脚本消息。感谢

3 个答案:

答案 0 :(得分:1)

不使用没有容器或缩小上下文的伪选择器,根据我的经验,它们在IE7或IE8 compat模式下运行缓慢且特别糟糕。

$(":etc")切换$("#container").find("input:text")语法并尝试用传统的for循环替换$ .each(假设$ .each正在迭代很多东西,否则影响可以忽略不计)

将容器缓存在循环之外。

var $container = $("#container");
$.each (etc, function(i) {
      var a = $container.find("input:text");
      // do more stuff
}

某些标记可​​能会为我提供一个更具体的机会

答案 1 :(得分:0)

一些提示:

  • .prop()通常比.attr()
  • 缩小选择器范围:“:checkbox”和“:text”仅适用于输入

    $('input:复选框。'+ i).attr('checked',Boolean(val));
    $('输入:文字。'+ i +',选择。'+ i).val(val);

答案 2 :(得分:0)

你能把它缩小到父母吗?即,你可以从形式,div等内部开始这些元素吗?

var $memoized_form = $( 'form#the_form' );

$.each(data, function (i, val) {
    $memoized_form.find( 'input:checkbox.' + i ).prop('checked', (val == 1 ? true : false));
    $memoized_form.find( 'input:text.' + i + ', select.' + i).val(val);
});