我可以在jquery中创建一个复合选择器吗?

时间:2014-09-26 13:23:35

标签: javascript jquery

我有一个函数,它使用每个元素遍历集合中的每个元素,并在从DOM中删除一个元素后重新编号。

现在该功能看起来像这样:

renumber_items = function(){
  $(".item_set").each(function(index){
    $(this).find('legend').html("Item " + (index+1));
  });
};

我记得在某处找到了一个非常低效的操作,所以我想知道是否有办法将'legend'选择器与 this 组合成一个复合选择器。

3 个答案:

答案 0 :(得分:2)

如果每legend只有一个.item_set,这会略微缩短一点:

renumber_items = function(){
  $(".item_set legend").html(function(index){
      return "Item " + (index+1);
  });
};

.html可以接受一个函数并存储结果。

如果legend.item_setvar $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