jquery .each создает 'undefined' всякий раз, когда .data используется в возвращаемых элементах - PullRequest
1 голос
/ 02 марта 2012

Я пытаюсь обработать все выбранные элементы с определенным установленным атрибутом data-.

У меня есть цикл, работающий для выбора элемента, но всякий раз, когда я пытаюсь найти значение других его атрибутов data-, я получаю undefined сообщения об ошибках.

Вот цикл:

$('select[data-hm-observed="1"]').each(function(idx, sel) {
        alert(sel.getAttribute('data-hm-url'));
        alert(sel.data('hmUrl'));
});

В цикле первое предупреждение работает, но второе выдает:

TypeError: 'undefined' не является функцией (вычисление 'Sel.data (' hmUrl ')')

Если я использую консоль Safari, я могу получить объект select, поместить его в переменную и без проблем опросить его атрибуты data-.

Кажется, что .each() влияет на содержимое переменной sel - но я не могу понять, что.

Использование JQuery 1.7.1

UPDATE:

Только что обнаружил, что если я изменяю цикл так, чтобы он снова явно получал элемент, все это работает:

$('select[data-hm-observed="1"]').each(function(idx, sel) {
            xx = $(sel);
        alert(sel.getAttribute('data-hm-url'));
        alert(xx.data('hmUrl'));
});

Это правильное решение? Могу ли я из этого сделать вывод, что элемент, переданный в цикл с помощью .each, не был «обработан» jquery, и что мне нужно самому извлекать его через $ (...), чтобы jquery с ним все делал - это не чувствует себя хорошо - но это работает.

1 Ответ

4 голосов
/ 02 марта 2012

sel здесь DOM-объект, не оснащенный способностями объекта jQuery. Во-первых, вы должны превратить этот объект DOM в объект jQuery следующим образом:

alert( $(sel).data('hmUrl') );

В качестве альтернативы вы также можете использовать $(this).data('hmUrl'), поскольку this будет ссылаться на sel (текущий элемент DOM в итерации).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...