我有一组元素,虽然每个都有一个唯一的字符串标识符,我无法安全地使用它的值作为元素 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()
和函数更好,因为它显式返回单个(或没有)项,并在需要时立即停止迭代,但是否有更好的方法?
答案 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 + '"]')