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

IE7中的慢速脚本-最快的jquery选择器,jquery,json,internet-explorer-7,Jquery,Json,Internet Explorer 7,数据是一个JSON对象。当我运行这个程序时,IE7会抱怨脚本太慢。Im将值从json对象映射到类名,即。有没有办法让这个选择器运行得更快?代码可以工作,但是迭代每个元素的速度必须更快,才能消除ie7缓慢的脚本消息。谢谢一些提示: .prop通常比.attr慢 缩小选择器的范围::复选框和:文本仅适用于输入 $'输入:复选框。'+i.attr'checked',Booleanval; $'input:text.'+i+',选择'+i.valval 一些提示: .prop通常比.attr慢 缩小选择

数据是一个JSON对象。当我运行这个程序时,IE7会抱怨脚本太慢。Im将值从json对象映射到类名,即。有没有办法让这个选择器运行得更快?代码可以工作,但是迭代每个元素的速度必须更快,才能消除ie7缓慢的脚本消息。谢谢

一些提示:

.prop通常比.attr慢 缩小选择器的范围::复选框和:文本仅适用于输入

$'输入:复选框。'+i.attr'checked',Booleanval; $'input:text.'+i+',选择'+i.valval

一些提示:

.prop通常比.attr慢 缩小选择器的范围::复选框和:文本仅适用于输入

$'输入:复选框。'+i.attr'checked',Booleanval; $'input:text.'+i+',选择'+i.valval


不要在没有容器或狭窄上下文的情况下使用伪选择器,根据我的经验,在IE7或IE8兼容模式下,它们速度很慢,尤其糟糕

使用$container.findinput:text切换$:etc语法,并尝试使用传统的for循环替换$。每个循环假定为$。每个循环都在迭代很多事情,否则影响是可以忽略的

将容器也缓存在循环之外

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

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

不要在没有容器或狭窄上下文的情况下使用伪选择器,根据我的经验,它们很慢,在IE7或IE8兼容模式下尤其糟糕

使用$container.findinput:text切换$:etc语法,并尝试使用传统的for循环替换$。每个循环假定为$。每个循环都在迭代很多事情,否则影响是可以忽略的

将容器也缓存在循环之外

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

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

你能把它缩小到一个家长吗?例如,这些元素是否在表单、div等中,您可以从中开始

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

你能把范围缩小到父母吗?例如,这些元素是否在表单、div等中,您可以从中开始

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


我认为我们应该考虑一下加价问题。在编写脚本之前,可能有一种方法可以对其进行优化。你能提供你的html的一个片段吗?你确定了慢的来源吗?可能来自循环$。每个,或来自您的一个选择器。。。有运行脚本的在线页面吗?@BorisDelomas是选择器。它不是一个公共页面。如果在每个示例中重复使用,$context和cache,请使用带有这种选择器的上下文$':checked',$context和cache…我认为我们应该考虑标记。在编写脚本之前,可能有一种方法可以对其进行优化。你能提供你的html的一个片段吗?你确定了慢的来源吗?可能来自循环$。每个,或来自您的一个选择器。。。有运行脚本的在线页面吗?@BorisDelomas是选择器。它不是一个公共页面。将上下文与这种选择器$':checked'、$context和cache一起使用,如果在每个示例中重复使用,$container.find'.blah'与选择器$'.container.blah'之间有什么区别吗?除非多次使用选择器,否则没有区别。在这种情况下,您应该使用$containernot完全正确。如果您有一个包含数百个DOM节点的文档,那么在每个节点中查找类“container”可能会非常昂贵。顺便说一句,IE7在这方面尤其糟糕,iPad也是如此。多个类名可能是您可以使用的最昂贵的选择器。谢谢,$container.find'.blah'与选择器$'.container.blah'之间有什么区别吗?除非您多次使用选择器,否则没有区别。在这种情况下,您应该使用$containernot完全正确。如果您有一个包含数百个DOM节点的文档,那么在每个节点中查找类“container”可能会非常昂贵。顺便说一句,IE7在这方面尤其糟糕,iPad也是如此。多个类名可能是您可以使用的最昂贵的slector。谢谢,$container.find'.blah'与选择器$'.container.blah'之间有什么区别吗?是的,$'.container.blah'意味着jQuery首先必须查看每个节点,看看它是否属于类“container”,然后必须检查它是否有类blah的子节点。一些更现代的浏览器有一个本机getElementsByCassName,但IE7不是其中之一谢谢,$container.find'.blah'和选择器$'.container.blah'之间有什么区别吗?是的,$'.container.blah'意味着jQuery首先必须查看每个节点,看看它是否属于“container”类,然后必须检查它是否有blah类的子节点。一些更现代的浏览器有一个本地getElementsByCassName,但IE7不是其中之一