jQuery窗口'hashchange'切换语句效率

时间:2013-12-04 17:21:13

标签: javascript jquery

我基于URL哈希中的值在jQuery multiselect控件中显示“selected”项。例如,

http://localhost/index#options=2,3,4

基于url hashQuery在multiselect控件中呈现第2,3和4个“selected”。我的问题是如何定义窗口“hashchange”事件,以便我不必考虑每个可能的值组合,以确定显示所选的内容。例如,这是我已经开始的以及我想要避免的因为它效率不高

 $(window).on('hashchange');
        if (hashQuery.option) {
            switch (hashQuery.option) {
                case '1':
                    $("#options option[value='1']").attr("selected", "selected");
                    break;
                case '1,2':
                    $("#options option[value='1']").attr("selected", "selected");
                    $("#options option[value='2']").attr("selected", "selected");
                    break;
                case '1,2,3':
                    $("#options  option[value='1']").attr("selected", "selected");
                    $("#options option[value='2']").attr("selected", "selected");
                    $("#options option[value='3']").attr("selected", "selected");
                    break;
                default:
                    //
            }
        } 

如何才能提高效率并保持同样的效果呢?如果您有任何问题,请与我们联系。

1 个答案:

答案 0 :(得分:2)

您有一个选项值列表,因此请将其视为选项值列表。将其转换为数组,然后您可以简单地遍历数组并为每个值选择选项。

$(window).on('hashchange', function() {
  var values = hashQuery.option.split(',');
  // values is now an array like ['1', '2', '3']

  // so just loop through it
  var selector;
  for (i = 0; i < values.length; i++) {
    selector = "#options option[value='"+ values[i] +"']";
    $(selector).attr('selected', 'selected');
  }
};

这不是关于效率(代码执行的速度)。事实上,使用循环可能会使它变得非常慢。它只是让干净的代码在添加更多选项时做正确的事情。