我有一个函数,它使用每个元素遍历集合中的每个元素,并在从DOM中删除一个元素后重新编号。
现在该功能看起来像这样:
renumber_items = function(){
$(".item_set").each(function(index){
$(this).find('legend').html("Item " + (index+1));
});
};
我记得在某处找到了一个非常低效的操作,所以我想知道是否有办法将'legend'选择器与 this 组合成一个复合选择器。
答案 0 :(得分:2)
如果每legend
只有一个.item_set
,这会略微缩短一点:
renumber_items = function(){
$(".item_set legend").html(function(index){
return "Item " + (index+1);
});
};
.html
可以接受一个函数并存储结果。
如果legend
每.item_set
个var $legends = $(".item_set legend");
renumber_items = function(){
$legends.html(function(index){
return "Item " + (index+1);
});
};
,则需要保留每个{{1}}以保持每组的数字顺序。
通常,如果您遇到速度问题,在多次调用的函数上,并且jQuery选择器结果位于一组固定的元素上,您只需在页面加载时将搜索归档到变量,然后重复使用:
{{1}}
答案 1 :(得分:0)
也许你可以试试.filter()。正如其他人所说,只要你不是一直使用它,它就不应该是这样的性能问题。考虑标记您要查找/过滤的所有项目,以便您可以一次在一个JQuery选择器中获取它们,并且您不必在之后过滤所有内容。否则你可以使用(由@Regent评论):
renumber_items = function(){
$(".item_set legend").each(function(index){
$(this).html("Item " + (index+1));
});
};
答案 2 :(得分:-1)
您可以替换:
$(this).find('legend')
使用:
$('legend', this)
第二个参数设置jQuery搜索' legend'。
的上下文如果省略,则上下文默认为document
。