3

我有一个元素集合,虽然每个元素都有一个唯一的 String 标识符,但我不能安全地将它的值用作元素 ID ,因为我不能保证它只包含有效字符。因此,我将标识符存储在每个元素 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()函数更好,因为它显式返回单个(或没有)项目,并在需要时立即停止迭代,但有更好的方法吗?

4

3 回答 3

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

编辑:重写为函数,添加了 return $()

于 2013-08-06T12:11:56.487 回答
0

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

$('[data-group="'+group+'"]')
于 2013-08-06T11:14:31.617 回答
0
$from.find('[data-group="' + group + '"]')
于 2013-08-06T11:16:14.750 回答