Doing [i]
извлекает собственный элемент DOM.
Если вы сделаете это, вы должны получить доступ к свойству .src
напрямую.
var cls = $('.class');
for (var i = 0; i < cls.length; i++) {
var myClass = cls[i];
var myClassSrc = myClass.src;
... или используйте метод eq()
[документы] , чтобы получить объект jQuery с элементом для заданного индекса:
var cls = $('.class');
for (var i = 0; i < cls.length; i++) {
var myClass = cls.eq(i);
var myClassSrc = myClass.attr('src');
Также обратите внимание, что я удалил $('.class')
из цикла. Вам следует использовать кэшированную версию, которую вы сделали до цикла.
Я также изменил имя переменной с class
на cls
, поскольку class
является будущим зарезервированным словом в JavaScript.
Основываясь на комментариях ниже, вы столкнулись с очень распространенной проблемой. Поскольку вы назначаете обработчики событий внутри цикла for
, а JavaScript не имеет block scope
, это означает, что каждый созданный вами обработчик в цикле ссылается на одну и ту же переменную myClassSrc
, для которой будет установлено любое значение это было после завершения цикла.
Чтобы создать область видимости переменной, необходимо создать обработчик событий в новой области видимости переменной, которая ссылается на значение в итерации current . Для этого мы просто передаем любое значение, которое мы хотим сохранить, в вызов функции и создаем там обработчик:
function set_up_handler( elem ) {
var myClassSrc = elem.src; // <-- now this is a local variable referencing
// the "src" of the element passed in.
elem.addEventListener( 'click', function() {
alert( myClassSrc ); // <-- this will reference the local "myClassSrc"
}, false );
}
var cls = $('.class');
for (var i = 0; i < cls.length; i++) {
var myClass = cls[ i ];
set_up_handler( myClass ); // <-- pass the current element into a function
}