Как отправить параметр каждой функции в Jquery - PullRequest
2 голосов
/ 18 мая 2011

Я пытаюсь разбить галерею изображений на страницы с помощью jquery.Каталог изображений, который я использую, содержит около 600 изображений, названных так: "photo1.jpg" ... "photo (n) .jpg" ... "photo600.jpg".

Предположим, у меня естьпеременная, содержащая номер страницы var page, и на каждой виртуальной странице 40 изображений.Я хочу сделать что-то вроде:

for (var i = 0; i<40; i++){
      var imageNum = (((page*40)-40)+i+1);
      $("img")[i].attr("src","photo"+ imageNum + ".jpg"); // Doesn't work
   }
}

Это хакерство, но ты видишь, что я пытаюсь сделать?API jquery имел некоторую информацию об использовании each () для итерации через объект jquery, но я не мог понять, как отправить каждой функции параметр, содержащий данные о том, на какой странице я нахожусь, которую я будунужно определить пути к изображениям.Я собираюсь что-то вроде:

$("img").each(function (i) {
        //code to update image paths based on page parameter
      });

Я также открыт для разных подходов, я абсолютный новичок, и я чувствую, что я могу поступить по этому поводу неправильно с самого начала:С.

Редактировать Спасибо всем за ответы.

Если вы ищете быстрый и простой ответ, который работает с использованием каждого (), посмотрите ответ Джеффа Б.

Я принял ответ Патрика Д.В., потому что в нем более подробно рассказывается об отдельной ошибке, которую я совершил, а также о другом подходе.Также, пожалуйста, смотрите наши комментарии к его ответу, если вы похожи на меня и считаете, что вам нужно передать параметры в .each ().

Ответы [ 3 ]

3 голосов
/ 18 мая 2011

Это не работает, потому что [i] дает вам собственный элемент DOM, который не обернут в объект jQuery.

jQuery имеет метод eq() [документы] , чтобы дать вам обернутый элемент, чтобы вы могли вызвать attr() [документы] метод.

   // Do NOT run the selector inside the loop
var imgs = $("img");

for (var i = 0; i<40; i++){
      var imageNum = (((page*40)-40)+i+1);
      imgs.eq( i ).attr("src","photo"+ imageNum + ".jpg"); // Doesn't work
   }
}

В качестве альтернативы вы можете передать функцию непосредственно в метод attr() [документы] , который будет циклически проходить по элементам.

$("img").attr( 'src', function(i) {
    return "photo" + (((page*40)-40)+i+1) + ".jpg";
});

Значение return - это значение, которое будет назначено атрибуту, который вы устанавливаете (в данном случае это src).

1 голос
/ 18 мая 2011

Функция .each() передает для вас индекс (и значение, если хотите):

$("img").each( function(idx) {
    $(this).attr("src","photo"+ (((page*40)-40)+idx+1) + ".jpg");
});

Пример: (аналогично, но изменено для использования заполнителей)

http://jsfiddle.net/mEzR9/

0 голосов
/ 18 мая 2011

Второй подход, конечно, более привлекателен, но первый тоже подойдет.

Вы должны использовать это: $($("img")[i]).attr(...)

...