针对唯一元素优化jQuery过滤器

时间:2013-08-06 11:10:03

标签: optimization jquery jquery-data jquery-filter

我有一组元素,虽然每个都有一个唯一的字符串标识符,我无法安全地使用它的值作为元素 ID < strong>因为我不能保证它只包含valid characters 。因此,我将标识符存储在每个元素jQuery .data()对象中。虽然我可以使用data-属性,但我并不喜欢使用选择器的想法,我可能不得不逃避引号等,但如果有巨大的效率奖励,则应该考虑它。使用.data()对象的解决方案也很棒,因为这可适用于任何数据类型。

我想知道选择单个元素的最有效方法是什么。目前,这是我的解决方案:

function get_group($from, group) {
  var $result = $();
  $from.each(function() {
    if($(this).data("group") == group) {
      result = $(this);
      return false;
    }
  });
  return $result;
}

我迭代我的每个结果,直到找到匹配。当我这样做时,我会脱离循环。通过将$result初始化为空的jQuery对象,我将始终返回jQuery ,我认为这与标准实践最为一致,尤其是.filter()方法。

我认为这比使用.filter()和函数更好,因为它显式返回单个(或没有)项,并在需要时立即停止迭代,但是否有更好的方法?

3 个答案:

答案 0 :(得分:1)

似乎for循环比你得到的循环更快:

function get_group ($from, group)
    for (var i = 0; i < $from.length; i++) {
        if ($($from[i]).data("group") == group) {
            return $($from[i]);
        }
    }
    return $();
}

JSPerf:http://jsperf.com/each-vs-data-selector

编辑:重新编写功能,添加返回$()

答案 1 :(得分:0)

正如您所说,如果每个数据组都是唯一的,您可以这样做 -

$('[data-group="'+group+'"]')

答案 2 :(得分:0)

$from.find('[data-group="' + group + '"]')