2014-03-24 40 views
0

我需要爲匹配.myClass的每個元素運行一次函數 - 但它需要按每個元素有多少個父元的順序運行。按照父代數量的順序運行each()函數

$('.myClass').each(function(index){ 
    //my code 
}); 

我能想到這樣做的唯一的事情是做另一each()功能只是一個附加基礎上,parents().length()數據排序屬性,但肯定有一個更好的方法,然後在此之前?

+0

阻止您在當前的每個()調用中使用'parents().length'嗎? –

+0

不,但我需要在調用該函數之前對元素進行排序。或者通過其他方式按照父母數量的順序運行該功能。 – sanjaypoyzer

+0

@FrédéricHamidi但它如何幫助按父母數量的順序運行每個回調 –

回答

4

map將父元素數與元素對象數組一起使用。然後對它進行排序並重復結果。

var els = $('.myClass'); 

var data = els.map(function(index, el){ 
    return {el: el, pars:$(el).parents().length}; 
}).toArray() 
    .sort(function(a,b) { 
    return a.pars - b.pars; 
}); 

$.each(data, function(i, obj) { 
    var el = obj.el; 
    // do something with el 
}); 
+0

謝謝。在那個時候用'el'做jquery事情的正確語法是什麼? '$(el)'和'el'不工作。 – sanjaypoyzer

+0

@sanjaypoyzer:'el'是一個DOM元素,所以要使用jQuery方法,將它傳遞給jQuery函數'$(el)'。如果這不起作用,我不知道爲什麼。你是否正確複製/粘貼上面的代碼? –

+0

啊,我很傻 - 很棒。乾杯。 – sanjaypoyzer