代码之家  ›  专栏  ›  技术社区  ›  Casebash

对jquery对象的迭代返回字符串而不是dom元素

  •  4
  • Casebash  · 技术社区  · 15 年前

    我有以下循环:

    for(var myScreen in wizardScreens){
        if(step==index)$(myScreen).show();
        else $(myScreen).hide();
        index++;
    }
    

    wizardScreens 定义为 $(".wizardScreen", wizard); wizard 是DOM元素。在循环中, myScreen 设置为字符串,而不是DOM元素。有人能解释为什么会这样吗?

    2 回复  |  直到 15 年前
        1
  •  3
  •   hobbs    15 年前

    jQuery集合已经具有内置的迭代函数:

    wizardscreens.each(function (index, screen) {
      if (index == step)
        $(screen).show();
      else
        $(screen).hide();
    }
    

    或者更适合您使用:

    var activescreen = wizardscreens.eq(step);
    activescreen.show();
    wizardscreens.not( activescreen[0] ).hide();
    

        2
  •  1
  •   Tgr    15 年前

    一般来说,答案是 .each ,但这会为每个DOM元素调用一个函数,这比使用jQuery函数一次操作jQuery对象中的所有节点要慢,因此最好尽可能避免使用它。在这种情况下,绝对有可能:

    wizardScreens.hide().eq(step).show();