Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Применение библиотек > jquery создать свой набор (в цикле?)


Автор: Frozen_Coyote 9.4.2015, 14:34
Привет,

у меня есть к примеру некий набор

Код


imgs = $('#container').find('img');




в нем как можно догадаться находятся все картинки контейнера, отсортированные по своем расположению внутри контейнера. Что мне нужно: мне нужно создать ТОЧНО такой же по структуре набор, но где я могу пересортировать размещение каждого img согласно моему какому то алгоритму. Как я понимаю, создаем новый объект, да? Затык же приключился в том, что я никак не пойму, как динамически добавлять новый элемент к новому объекту. 

Например, я хочу чтобы сортировка элементов была такая (слева направо) - первый, последний, второй, предпоследний, третий, пред-предпоследний и т.д.

Код


new_pics = new Object;

for(var m = 0; m < imgs.length; m++)
{
                    
if(m % 2 == 0)
num = m % imgs.length / 2;
else
num = imgs.length - num - 1;

// и вот тут мы получаем доступ к нашей картинке в первом наборе imgs.eq(num), которую я хочу добавить в свой новый набор


$_extend(new_pics, imgs.eq(num));

// это вариант постоянно добавляет только последний элемент, я уж устанавливал размер объекта = 6 - нифига. 

                    
}




Хелп!

Автор: _zorn_ 17.4.2015, 18:02
....
Ха, оказывается я тоже не знаю как изменить порядок малой кровью (вернее как вообще воздействовать на это) в jQuery объекте. Всегда считал его что то вроде массива, а не тут то было.

ЗЫ. Хорошая задачка  smile 

Автор: ksnk 18.4.2015, 13:02
вариант раз.
В jQuery есть метод add. C его помощью можно пробегаясь в нужном порядке по исходным картинкам, собрать новый элемент.

вариант два.
С точки зрения конструкции языка - объект jQuery, практически, массив. Тоесть, элементам пустого jQuery объекта можно присваивать по "вырезке". Отличие в том, что length при этом не изменяеся автоматически и его нужно откорректировать вручную.

Автор: _zorn_ 19.4.2015, 03:41
Цитата(ksnk @  18.4.2015,  20:02 Найти цитируемый пост)
С точки зрения конструкции языка - объект jQuery, практически, массив.

Я тоже так думал, но http://jsbin.com/vopilafofi/1/edit?html,js,output
Вообще непонятно что происходит.

Да и add че то не работает http://jsbin.com/xowegogiti/1/edit?html,js,output

У меня тоже в голове все ровно по полочкам было, но когда на практике попробовал....

Автор: ksnk 19.4.2015, 11:59
Цитата(_zorn_ @  19.4.2015,  03:41 Найти цитируемый пост)
Да и add че то не работает

http://jsbin.com/qekomubufe/1/edit?html,js,output
.add делает новый объект, его нужно присваивать. Я там добавил еще и clone, чтобы старый элемент не пропадал из исходного массива.
Код

var imgs = $('div > div');
var imgs_tmp = $();
for(var i=0; i<imgs.length/2; i++)
  {
    imgs_tmp.add(imgs[i]);
    if(i != imgs.length-i) 
        imgs_tmp=imgs_tmp.add(
            $(imgs[imgs.length-i]).clone()
        );
   //console.log(imgs_tmp);
  }
$('ololo').append(imgs_tmp);


Добавлено через 2 минуты и 2 секунды
А что надо получить-то? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)