质量选择选项

时间:2014-03-14 19:47:39

标签: jquery performance

我有一个逗号分隔值列表" 1,2,3,4" 我有一个多选列表,其中包含与这些值匹配的选项,我在列表中循环并单独选择每个选项(见下文)

jQuery.each(selectedVals, function(index, item){
     jQuery("option[value='"+item+"']", jQuery("#manage select")).attr('selected', true);
});

多选列表和值可以是数百个,因此在循环和选择时,旧浏览器的性能会很慢。有没有更快的方法来实现这一目标?有些人如何一次性选择它们?

3 个答案:

答案 0 :(得分:0)

首先缓存查询过的对象,看看是否确实存在性能问题。你不应该在循环中做jQuery("#manage select")之类的事情;你应该存储这个值,这样你就不必不断地回到DOM来找到你之前已经找到的元素:

var $manage = jQuery("#manage select");

jQuery.each(selectedVals, function(index, item){
     $manage.find("option[value='"+item+"']").prop('selected', true);
});

然而,每个循环仍在查询DOM。您还可以通过在<options>容器中找到所有 #manage,然后逐个手动过滤它们来获得巨大的性能提升:

var $options = jQuery("#manage select option");

jQuery.each(selectedVals, function (index, item){
  $options.each(function () {
    if ($(this).attr('value') == $item) {
      $(this).prop('selected', true)
      return false;
    }
  });
});

答案 1 :(得分:0)

通过将值数组传递给.val()而不是将每个选项设置为选中,我能够更快地完成这一任务。

答案 2 :(得分:-1)

使用:.prop('checked', true);,以便一次检查多个复选框。

JSFIDDLE