2014-12-25 4 views
0

Я не мог найти решение, которое подойдет для меня по этому вопросу, поэтому извините меня, если вы дублируете.javascript loop through .children() items and save to array

Я хочу просмотреть все элементы .children(), и если некоторые из этих элементов соответствуют условиям, я хочу сохранить эти элементы в одном массиве. Вот код, чтобы показать, что именно я имею в виду:

var items = [], 
     allitems = $('.iconImg').children(), 
     obj; 


    // console.log(allitems); 

    $('#next4').on('click', function(e){ 

     e.preventDefault(); 

     for(var i=0; i<allitems.length; i++){ 

      var currItem = $(allitems[i]).attr('id'), 
       currItemPosLeft = parseInt($('#'+currItem).css('left')), 
       itemOffset = getOffset('#'+currItem), 
       items = [], 
       arrToSend = []; 

       // console.log(currItem, '=>', currItemPosLeft);  

      if(currItemPosLeft >= 405){ 

       obj = { 

        obId: currItem, 
        obPos: itemOffset 

       } 


       items.push(obj); 
       console.log(items); 

      }     


     } 

Этот код дает мне отдельно количество массивов объектов, которые удовлетворяют условие, но то, что я хотел бы это один массив для хранения этих объектов.

Как я могу это сделать?

Thanks

+0

Возможные дубликат: http://stackoverflow.com/questions/9151729/how-to-get-children-array-of-an-element-in-jquery – tomloprod

ответ

0

Хорошо, я решил. Я не уверен, почему я так много усложнил, это очень легко.
Таким образом, код будет:

var items = [], 
    allitems = $('.iconImg').children().toArray(), 
    obj; 


    // console.log(allitems); 

    $('#next4').on('click', function(e){ 

     e.preventDefault(); 

     $(allitems).each(function(i){ 

      var currItem = $(allitems[i]).attr('id'), 
       currItemPosLeft = parseInt($('#'+currItem).css('left')), 
       itemOffset = getOffset('#'+currItem); 


      // console.log(currItem, '=>', currItemPosLeft); 

      obj = { 

       odId: currItem, 
       obPos: itemOffset 

      }; 

      if(currItemPosLeft >= 405){ 

       items.push(obj); 

      } 




     }) 

     console.log(items); 


    }) 
    //end of #next4 click 
0

просто демо, чтобы делать вещи;

var testData = [{id:1,data:'abc'},{id:2,data:'efg'},{id:3,data:'pqr'},{id:4,data:'xyz'}] 

var res = [] 

testData.forEach(function(o){ 
     if(o.id % 2 == 0) { //your condition.. 
      res.push({nid:o.id, ndata: o.data}) 
     } 
}); 

DEMO: http://jsfiddle.net/dpst36xe/

+0

Спасибо @Aaron, очень полезная демо! –