使用“过滤器”按名称而不是id将页面上的元素添加到数组

时间:2010-12-13 19:08:15

标签: javascript ajax mootools

感谢@Dimitar Christoff的一些帮助,我得到了一些Ajax问题。即从加载的页面中仅按ID抓取特定元素。在下面的示例中,这些预定元素被添加到panels数组中,然后通过调用panel[0]panel[1]等来访问。问题是这些元素可能并不总是添加到数组中相同的顺序,因此在一种情况下,panel[0]实际上可能是<div id="panel_2"></div>,而在其他情况下,它可能是<div id="panel_1"></div>

如何更改返回以按名称添加元素,以便我可以调用panel['panel_0']

以下是示例:http://jsfiddle.net/brandondurham/SPUFe/

1 个答案:

答案 0 :(得分:1)

好吧,我不知道你正在使用的Javascript工具包,但我猜测如果它有一个过滤功能,它可能还有一个reduce函数。下面是一个如何将数组减少到对象(然后可以按要求使用)的示例:

var panelsMap = panels.reduce(function (map, el, index, array) {
  map[el.get("id")] = el;
  return map;
}, {});

或者,您可以在原始循环内部完成工作。在这种情况下,使用“过滤器”没有任何意义,但您可以用forEach或类似的东西替换它。这是一个例子(继续使用过滤器):

onComplete: function() {
    var weLike = ["panel_1", "panel_2", "panel_3"];
    var panels = {};
    $$(this.response.elements).filter(function(el) {
        if ($(el) && el.get && weLike.contains(el.get("id"))) {
          panels[el.get("id")] = el;
        }
        return false;
    });

    alert(panels);
}