Использование «фильтра» для добавления элементов на странице в массив по имени вместо идентификатора - PullRequest
0 голосов
/ 13 декабря 2010

Благодаря некоторой помощи от @Dimitar Christoff я смог получить некоторые проблемы с Ajax. А именно, захват только определенных элементов по идентификатору с загруженной страницы. В приведенном ниже примере эти предопределенные элементы добавляются в массив 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 Ответ

1 голос
/ 13 декабря 2010

Ну, я не знаю инструментарий Javascript, с которым вы работаете, но я предполагаю, что если он имеет функцию фильтра, он, вероятно, также имеет функцию сокращения.Вот пример того, как вы можете уменьшить массив до объекта (который затем может быть использован по запросу):

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...